1.测试docker是否存在
- sudo docker info
返回docker的基本信息
$ sudo docker info
//出现一下内容
Containers: 2
Running: 0
Paused: 0
Stopped: 2
Images: 1
...
2.运行第一个容器
$ sudo docker run -i -t ubuntu /bin/bash
//开始下载容器并运行
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
473ede7ed136: Pull complete
c46b5fa4d940: Pull complete
93ae3df89c92: Pull complete
6b1eed27cade: Pull complete
Digest: sha256:29934af957c53004d7fb6340139880d23fb1952505a15d69a03af0d1418878cb
Status: Downloaded newer image for ubuntu:latest
root@363ed45619ae:/#
- 注意 可通过 docker help 或者 man docker-run 来获取 docker的命令列表
- 解析:
sudo docker run -i -t ubuntu /bin/bash
其中-i 标志保证容器中STDIN是开启的,持久的标准输入,-t标志是告诉docker为要创建的容器分配一个伪tty终端。 Ubuntu是 创建一个Ubuntu镜像,同时告诉新容器中要运行:/bin/bash 命令。所以就到:root@363ed45619ae:/# 。
3.使用容器
其中容器ID 363ed45619ae 。 也是它的主机名。
root@363ed45619ae:/home# hostname
363ed45619ae
root@363ed45619ae:/home# cat /etc/hosts
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2 363ed45619ae
- 网络配置
root@363ed45619ae:/home# ip a
- 检查容器进程
root@363ed45619ae:/home# ps -aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 18508 3428 pts/0 Ss 07:34 0:00 /bin/bash
root 21 0.0 0.0 34400 2860 pts/0 R+ 07:47 0:00 ps -aux
- 在容器中安装软件包
root@363ed45619ae:~# apt-get upate root@363ed45619ae:~# apt-get install vim
- 退出容器
exit
退出后,回到自己的物理机
- 查看当前系统中的容器列表
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
363ed45619ae ubuntu "/bin/bash" 19 minutes ago Exited (0) 31 seconds ago keen_boyd
31ef04a4ff1b hello-world "/hello" 3 days ago Exited (0) 3 days ago gifted_austin
e4166694ac7c hello-world "/hello" 3 days ago Exited (0) 3 days ago brave_kare
- 查看最后一次运行的容器
$ sudo docker ps -a -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
363ed45619ae ubuntu "/bin/bash" 20 minutes ago Exited (0) About a minute ago keen_boyd
4.容器命名
--name 标志
$ sudo docker run --name hiekay_container -i -t ubuntu /bin/bash
root@989f63da27d3:/# exit
exit
$ sudo docker ps -a -l
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
989f63da27d3 ubuntu "/bin/bash" 26 seconds ago Exited (0) 8 seconds ago hiekay_container
合法的容器名称符合: [a-zA-Z0-9_·-]
5.重启停止的容器
可以通过容器名称 或则 容器ID
$ sudo docker start hiekay_container
hiekay_container
$ sudo docker start 989f63da27d3
989f63da27d3
6.附着到容器上
docker容器重新启动的时候 会重启一个交互式会话shell,我们可以用 docker attach 重新附着到该容器会话上 , 可通过容器 name 或者 ID 。
$ sudo docker attach hiekay_container
root@989f63da27d3:/#
$ sudo docker attach 989f63da27d3
root@989f63da27d3:/#
7.创建守护式容器
除了交互式运行的容器,大部分是需要创建长期运行的容器, 守护式容器 没有交互式会话,适合运行应用程序和服务。
实例:
$ sudo docker run --name demo -d ubuntu /bin/sh -c "while true; do echo hello world; sleep1; done"
ea6e0fecba4f5185f62e2a46851882572bdb465fccfdac6b27a64ea9ff3cedc9
其中-d参数 是标志让容器放在后台运行。
其中 命令是让 运行一个 while 循环 一直打印 hello world ,直到容器或进程停止。
- 可通过 docker ps命令 查看 正在运行的容器
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ea6e0fecba4f ubuntu "/bin/sh -c 'while t…" 2 minutes ago Up 2 minutes demo
8.查看容器内部的工作
- docker logs
$ sudo docker logs demo
hello world
hello world
hello world
......
也可以用 -f参数来监控日志
$ sudo docker logs -f demo
也可以用 tail 命令看最后的几行日志
sudo docker logs --tail 10 demo
或
sudo docker logs --tail 0 -f demo
9.查看容器内的进程
- docker top
$ sudo docker top demo
UID PID PPID C STIME TTY TIME CMD
root 31469 31448 99 16:11 ? 00:09:46 /bin/sh -c while true; do echo hello world; sleep1; done
10.在容器内运行进程
- docker exec
两种类型:后台任务 和 交互式任务 - 后台任务
$ sudo docker exec -d demo touch /etc/new_file1
- 交互式任务
$ sudo docker exec -t -i demo /bin/bash
root@ea6e0fecba4f:/#
11.停止守护式容器
- docker stop name/ID
$ sudo docker stop demo
或
$ sudo docker stop ea6e0fecba4f
- 注意: 也可以通过docker kill 关闭
12.自动重启容器
- 自动重启标志: --restart
$ sudo docker run --restart=always --name demo -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
- 注意: --restart 被设置为 always ,无论退出代码是什么,一直会自动重启。
还可以设置为: on-failure 只有当退出代码为0的时候才会自动重启,也可以传参数: 5, 重启次数。
--restart=on-failure:5
13.深入容器
- docker inspect 获取更多容器信息
$ sudo docker inspect demo
//获取的信息
[
{
"Id": "ea6e0fecba4f5185f62e2a46851882572bdb465fccfdac6b27a64ea9ff3cedc9",
"Created": "2018-10-29T08:11:49.219017867Z",
"Path": "/bin/sh",
"Args": [
"-c",
"while true; do echo hello world; sleep1; done"
],
......
- 可以用 -f 或 --format 标志来选定查看结果 ,支持完整的Go语言模板
例子:
查看容器的运行状态
$ sudo docker inspect --format='{{.State.Running}}' demo
//返回
false
查看容器IP
$ sudo docker inspect --format='{{.NetworkSettings.IPAddress}}' demo
查看多个容器的信息
$ sudo docker inspect --format='{{.Name}} {{.State.Running}}' demo demo1
/demo false
/demo1 false
14.删除容器
- docker rm name/ID
$ sudo docker rm demo1
demo1
注意:删除之前 必须先关闭
删除所有
$ sudo rm 'docker ps -a -q '
解析:docker -a 列出所有容器,-q 返回ID, 然后传给 sudo rm ID , 即可删除。
15. 小结
docker 基础,请多联系。