1

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

Docker-info-command-Linux

Docker-Info-Registry-Kernel

(3) 搜索镜像

使用 docker search 命令,我们可以从 docker hub 仓库中搜索镜像。假设我们想搜索最新的 nginx 镜像

$ docker search nginx

Docker-Search-Command-Output

(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

Docker-Images-Command-Output

(6) 运行容器

使用 docker run 命令启动容器,假设我想从 nginx 镜像 运行一个容器。

$ docker run -it -p 9000:80 --name=myapp nginx

Docker-Run-Command-Example

上面将运行一个名称为 myapp 的容器,我们还设置了 PAT 规则,如果任何请求到 docker 主机上的 9000 端口,则该请求将被重定向到 myapp 容器的 80 端口。执行命令之后我们直接获得了控制台,输入exit 可以停止 /关闭容器,如果想从容器中退出而不停止它,请输入 ctrl+p+q

现在你可以使用 curl 命令访问 9000 端口上的 nginx 应用了

$ curl http://<Docker-Host-IP-Address>:9000/

(7) 分离模式运行容器

我们可以在 docker run 命令中使用 -d 选项以分离模式运行容器。这里的分离模式意味着我们将在执行 docker run 命令后获得命令提示符。

$ docker run -it -d -p 9080:80 --name=myapp2 httpd
f7dc2ece64708a9de5e53f341b0c7d17ac9189fb7c99079ad8744348bc5a6faa
$

(8) 查看所有运行的容器

执行 docker ps 命令查看所有正在运行的容器

$ docker ps

docker-ps-command-output

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

Remove-container-forcefully

(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

Copy-files-folder-Docker-Container

(15) 查看镜像构建历史

镜像的历史记录是指在构建镜像时执行了哪些命令,我们可以使用 docker history 命令来查看历史记录

$ docker history nginx

Docker-History-Command-Output

(16) 从容器中查看日志

我们可以从容器中查看日志,无需登录,运行 docker logs 命令

$ docker logs myapp

使用 -f 选项查看活动日志

$ docker logs -f myapp

查看某容器最近10条日志

$ docker logs --tail 10 myapp

View-logs-from-docker-conatiner

(17) 查看容器资源使用统计信息

使用 docker stats 命令查看所有容器的 CPU,内存和网络 I/O 情况

$ docker stats

Docker-Stats-Command-Output

查看特定容器的统计信息

$ docker stats myapp

资源使用统计信息,无实时流

$ docker stats --no-stream

使用 docker top 命令显示容器的运行进程

$ docker top myapp

docker-top-command-output

(18) 查看容器 IP 地址

使用 docker inspect 命令显示容器底层信息。我们可以通过 docker inspect 命令获取容器的 ip 地址

语法如下:

$ docker inspect -f ‘{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}’ <Container-Name>

实例如下:

$ 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

我的开源项目


鸠摩智首席音效师
472 声望9 粉丝

身强体健,龙精虎猛的活着。