Docker 容器是现在几天最新兴的技术之一。Docker 容器通常用于 CI / CD (Continuous Integration / Continuous Deployment 持续集成 / 持续部署) 平台中。容器是轻巧的 VM (Virtual Machines 虚拟机),可利用基础管理程序资源 (例如 RAM,CPU,HDD 和内核) 。
Docker 命令用于通过命令行管理容器和镜像。在本文中,我们将介绍 Linux 中 20 个有用的 docker 命令示例。我假设您的 Linux 系统上已经安装了 docker,并且当前用户已经添加到 docker 用户组中。
(1) 查看版本
在使用 docker 容器时,第一项重要的任务是知道你的 docker 版本
$ docker --version
Docker version 20.10.12, build e91ed57
$
(2) 查看系统范围内信息
docker info 命令用于查看 docker 的根目录、操作系统版本、内核版本、docker 版本、RAM、CPU、docker 注册表等信息。
$ docker info
(3) 搜索镜像
使用 docker search 命令,我们可以从 docker hub 仓库中搜索镜像。假设我们想搜索最新的 nginx 镜像
$ docker search nginx
(4) 下载镜像
docker pull 命令用于从 Docker hub 仓库中下载镜像
docker pull 命令总是尝试下载最新版本的镜像,假设我想下载最新版本的 nginx 镜像
$ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
5eb5b503b376: Pull complete
1ae07ab881bd: Pull complete
78091884b7be: Pull complete
091c283c6a66: Pull complete
55de5851019b: Pull complete
b559bad762be: Pull complete
Digest: sha256:2834dc507516af02784808c5f48b7cbe38b8ed5d0f4837f16e78d00deb7e7767
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
$
下载基于版本的特定镜像,假设我们想下载 ubuntu:20.04 镜像
$ docker pull ubuntu:20.04
20.04: Pulling from library/ubuntu
08c01a0ec47e: Pull complete
Digest: sha256:669e010b58baf5beb2836b253c1fd5768333f0d1dbcb834f7c07a4dc93f474be
Status: Downloaded newer image for ubuntu:20.04
docker.io/library/ubuntu:20.04
$
(5) 查看已下载的镜像
众所周知,docker 的根目录是 /var/lib/docker,每当我们使用 docker pull 命令下载镜像时,所有镜像都将保存在 docker 的根目录中。
要查看所有下载的 docker 容器镜像,请执行命令
$ docker image ls
or
$ docker images
(6) 运行容器
使用 docker run 命令启动容器,假设我想从 nginx 镜像 运行一个容器。
$ docker run -it -p 9000:80 --name=myapp nginx
上面将运行一个名称为 myapp 的容器,我们还设置了 PAT 规则,如果任何请求到 docker 主机上的 9000 端口,则该请求将被重定向到 myapp 容器的 80 端口。执行命令之后我们直接获得了控制台,输入exit 可以停止 /关闭容器,如果想从容器中退出而不停止它,请输入 ctrl+p+q
现在你可以使用 curl 命令访问 9000 端口上的 nginx 应用了
$ curl http://:9000/
(7) 分离模式运行容器
我们可以在 docker run 命令中使用 -d 选项以分离模式运行容器。这里的分离模式意味着我们将在执行 docker run 命令后获得命令提示符。
$ docker run -it -d -p 9080:80 --name=myapp2 httpd
f7dc2ece64708a9de5e53f341b0c7d17ac9189fb7c99079ad8744348bc5a6faa
$
(8) 查看所有运行的容器
执行 docker ps 命令查看所有正在运行的容器
$ docker ps
To view all running along with exited or stopped containers, run
要查看所有的容器(包括退出或停止),请运行
$ docker ps -a
(9) 访问容器控制台
使用 docker exec 命令访问容器控制台
sysops@linuxtechi:~$ docker exec -it myapp /bin/bash
root@3d5a0eef3e7a:/#
输入 exit 退出控制台
(10) 启动,停止,重启和杀死容器
就像虚拟机一样,我们可以启动、停止和重启 docker 容器。
停止运行的容器
$ docker stop myapp2
myapp2
重新启动容器
$ docker restart myapp2
myapp2
$
杀死容器
sysops@linuxtechi:~$ docker kill myapp2
myapp2
sysops@linuxtechi:~$
(11) 删除容器
Docker Container is removed or deleted using ‘docker rm‘ command. ‘docker rm’ will work only when docker is stopped / shutdown.
使用 docker rm 命令删除容器,仅当容器 停止 / 关闭时,docker rm 才能工作。
$ docker stop test-app
test-app
$ docker rm test-app
test-app
$
To remove a running container forcefully then use ‘-f’ option in docker rm command. Example is shown is below
使用 -f 选项强制移除一个正在运行的容器
$ docker rm -f nginx-app
(12) 删除镜像
就像容器一样,我们也可以删除镜像。docker rmi 命令用于删除镜像。
假设我们想要删除 ubuntu:20.04 镜像
$ docker rmi ubuntu:20.04
Untagged: ubuntu:20.04
Untagged: ubuntu@sha256:669e010b58baf5beb2836b253c14f7c07a4dc93f474be
Deleted: sha256:54c9d81cbb440897908abdcaa98674db831e40a66f704f
Deleted: sha256:36ffdceb4c77bf34325fb695e64ea447f629593310578d2
$
在上面的命令中,我们可以使用镜像 id 来代替名称
$ docker rmi 54c9d81cbb44
(13) 保存和加载镜像
使用 docker save 命令,将镜像保存到 tar 文件
$ docker save nginx -o mynginx.tar
$ ls -l mynginx.tar
-rw------- 1 sysops sysops 145931776 Feb 5 10:30 mynginx.tar
$
使用 docker load 命令,从 tar 文件加载镜像
$ docker load -i mynginx.tar
Loaded image: nginx:latest
$
注意:当我们想要将 docker 镜像从一个主机传输到另一个主机时,这些命令会变得很有用。
(14) 将文件 / 目录复制到容器
我们可以使用 docker cp 命令将文件或目录从 docker 主机复制到容器中。
下面我们将 mycode 目录复制到 myapp 容器中
$ docker cp mycode myapp:/tmp
(15) 查看镜像构建历史
镜像的历史记录是指在构建镜像时执行了哪些命令,我们可以使用 docker history 命令来查看历史记录
$ docker history nginx
(16) 从容器中查看日志
我们可以从容器中查看日志,无需登录,运行 docker logs 命令
$ docker logs myapp
使用 -f 选项查看活动日志
$ docker logs -f myapp
查看某容器最近10条日志
$ docker logs --tail 10 myapp
(17) 查看容器资源使用统计信息
使用 docker stats 命令查看所有容器的 CPU,内存和网络 I/O 情况
$ docker stats
查看特定容器的统计信息
$ docker stats myapp
资源使用统计信息,无实时流
$ docker stats --no-stream
使用 docker top 命令显示容器的运行进程
$ docker top myapp
(18) 查看容器 IP 地址
使用 docker inspect 命令显示容器底层信息。我们可以通过 docker inspect 命令获取容器的 ip 地址
语法如下:
$ docker inspect -f ‘{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}’
实例如下:
$ docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' myapp
172.17.0.2
$
(19) 构建镜像
docker 镜像是使用 docker build 命令构建的,要使用 docker build 命令,首先必须创建 Dockerfile。让我们假设 Dockerfile 是在 mycode 文件夹下创建的,然后运行以下命令来构建镜像
$ cd mycode
$ docker build -t mynginx:v2 .
(20) 镜像标签
docker tag 命令用于为镜像设置标签
语法如下 :
$ docker tag source_image{:tag} target_image{:tag}
假设将源镜像 mariadb:latest 的标签设置为 mariadb:10.03
$ docker tag mariadb:latest mariadb:10.03
$ docker images | grep -i mariadb
mariadb 10.03 45a5a43e143a 3 days ago 410MB
mariadb latest 45a5a43e143a 3 days ago 410MB
$
如果希望上传镜像到私有仓库,标签应加上仓库地址,如下所示:
$ docker tag mariadb:latest myregistry:5000/db/mariadb:10.03
使用 docker login 命令登录到私有仓库,运行 docker push 命令上传
$ docker push myregistry:5000/db/mariadb:10.03