Docker现在基本成为了运维人员必须掌握的专业技能之一,而docker默认没有图形界面管理,因此掌握docker-client命令行操作就显得十分重要。
- 安装docker指定版本:
# curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo
或者使用阿里源
# curl http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker.repo
# yum makecache fast
# yum install -y docker-ce-18.03.0.ce #以安装docker-ce-18.03.0版本为例
# systemctl start docker && systemctl enable docker
search
docker search 用来搜索可用的相关镜像。
- 从docker仓库中搜索nginx镜像:
# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 11083 [OK]
pull
docker pull 下载指定镜像。
- 从docker仓库中下载nginx镜像:
# docker pull docker.io/nginx
Using default tag: latest
latest: Pulling from library/nginx
f7e2b70d04ae: Pull complete
08dd01e3f3ac: Pull complete
d9ef3a1eb792: Pull complete
Digest: sha256:98efe605f61725fd817ea69521b0eeb32bef007af0e3d0aeb6258c6e6fe7fc1a
Status: Downloaded newer image for nginx:latest
docker pull 时可以指定镜像标签,不指定默认为latest。
images
docker images 查看已下载的本地docker镜像。
- 查看已下载的本地docker镜像:
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 881bd08c0b08 13 days ago 109MB
可以看到刚刚下载到本地的 nginx:latest 镜像。
run
docker run 启动docker镜像为容器。
- 启动nginx镜像为容器:
# docker run -itd -p 80:80 --name nginx nginx:latest
a38795771660b7e52ba7719dd936fbda36666ceff95fe66e79b6b845f278e9e9
上面命令后加上/bin/bash
就可以进入到容器中。
docker run 有一些参数选项:
-i:interactive交互
-t:tty终端
-d:daemon后台启动
-p:端口映射,前面的端口为宿主机监听端口,后面的端口为容器监听端口
--name:指定启动后容器的名字
--rm:退出容器后删除容器
使用 docker run 启动镜像为容器之前,如果本地没有镜像,会自动pull镜像。
ps
docker ps 查看当前正在运行中的容器。
- 查看当前正在运行中的容器:
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a38795771660 nginx:latest "nginx -g 'daemon of…" 9 minutes ago Up 9 minutes 0.0.0.0:80->80/tcp nginx
docker ps 还有一个常用的参数选项:
-a:查看当前系统中所有的容器,包括运行中、暂停中和已停止的容器
inspect
docker inspect 查看容器的详细信息。
- 查看nginx容器的详细信息:
# docker inspect nginx |grep -i ipaddr
"SecondaryIPAddresses": null,
"IPAddress": "172.17.0.2",
"IPAddress": "172.17.0.2",
查看容器的详细信息,并从信息中过滤IP地址。
exec
docker exec 在docker容器中执行命令。
- 在docker容器中执行
df -h
命令:
# docker exec nginx df -h
Filesystem Size Used Avail Use% Mounted on
overlay 36G 3.7G 32G 11% /
tmpfs 64M 0 64M 0% /dev
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/mapper/centos_master1-root 36G 3.7G 32G 11% /etc/hosts
shm 64M 0 64M 0% /dev/shm
tmpfs 1.9G 0 1.9G 0% /proc/acpi
tmpfs 1.9G 0 1.9G 0% /proc/scsi
tmpfs 1.9G 0 1.9G 0% /sys/firmware
已经启动的nginx容器可以这样进入:
# docker exec -it nginx bash
此处的 -it 参数选项与 docker run 中参数作用一致。
# docker exec nginx touch /tmp/1.txt
# docker exec -it nginx bash
root@a38795771660:/# ls /tmp/
1.txt
start/stop
docker start/stop 启动、停止指定的容器。
- 停止nginx容器,再启动nginx容器:
# docker stop nginx
nginx
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a38795771660 nginx:latest "nginx -g 'daemon of…" 28 minutes ago Exited (0) 9 seconds ago nginx
# docker start nginx
nginx
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a38795771660 nginx:latest "nginx -g 'daemon of…" 29 minutes ago Up 30 seconds 0.0.0.0:80->80/tcp nginx
另外,还可以使用 docker restart 来重启指定的容器。
kill
docker kill 用来kill掉运行中的容器。
- kill掉运行中的nginx容器:
# docker kill nginx
nginx
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a38795771660 nginx:latest "nginx -g 'daemon of…" 37 minutes ago Exited (137) 15 seconds ago nginx
docker kill 与 docker stop 作用类似,但后者要“温柔”一些。遇到 docker stop 也无法关闭的容器,可以使用 docker kill 强行关闭。
rm
docker rm 删除指定的容器。
- 删除nginx容器:
# docker rm nginx
Error response from daemon: You cannot remove a running container a38795771660b7e52ba7719dd936fbda36666ceff95fe66e79b6b845f278e9e9. Stop the container before attempting removal or force remove
# docker rm -f nginx
nginx
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
docker rm 的常用参数选项:
-f:强制删除正在运行中的容器
docker rm 无法直接删除正在运行中的容器,建议先停止容器,再删除容器。
rmi
docker rm 删除指定的镜像。
- 删除nginx镜像:
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 881bd08c0b08 13 days ago 109MB
# docker run -itd -p 80:80 --name nginx nginx:latest
b34323364cf285d17f25f7f338f298f73edb49ddf2b72d0aa31484676092cfa6
# docker rmi nginx:latest
Error response from daemon: conflict: unable to remove repository reference "nginx:latest" (must force) - container b34323364cf2 is using its referenced image 881bd08c0b08
# docker rmi -f nginx:latest
Untagged: nginx:latest
Untagged: nginx@sha256:98efe605f61725fd817ea69521b0eeb32bef007af0e3d0aeb6258c6e6fe7fc1a
docker rmi 的常用参数选项:
-f:强制删除正在运行中的容器的镜像
docker rmi 无法直接删除当前存在(不管时正在运行中还是已经停止)的容器的镜像,建议先停止、删除容器,再删除对应镜像。
更多命令
除了上面的命令以外,还有很多命令也是经常使用的。
- 更多命令如下:
Docker | 命令 | 作用 |
---|---|---|
docker | push | 推送指定镜像或者库镜像到docker源服务器 |
docker | history | 展示一个镜像形成历史 |
docker | attach | 当前shell下attach连接指定运行镜像 |
docker | build | 通过Dockerfile定制镜像 |
docker | commit | 提交当前容器为新的镜像 |
docker | cp | 宿主机和容器之间互相拷贝文件或目录 |
docker | create | 创建一个新的容器,同run,但不启动容器 |
docker | diff | 查看容器变化 |
docker | events | 从docker服务获取容器实时事件 |
docker | export | 导出容器的内容流作为一个tar归档文件[对应import] |
docker | import | 从tar包中的内容创建一个新的文件系统镜像[对应export] |
docker | info | 显示系统相关信息 |
docker | load | 从一个tar包中加载一个镜像[对应save] |
docker | login | 注册或登录一个docker源服务器 |
docker | logout | 从docker源服务器中登出 |
docker | logs | 输出当前容器的日志信息 |
docker | port | 查看映射端口对应的容器内部源端口 |
docker | pause | 暂停容器 |
docker | restart | 重启运行中的容器 |
docker | save | 保存一个镜像为一个tar包[对应load] |
docker | tag | 给当前镜像打标签 |
docker | top | 查看容器中运行的进程信息 |
docker | unpause | 恢复暂停的容器 |
docker | version | 查看docker版本号 |
docker | wait | 截取容器停止时的退出状态值 |