学习Docker的初学者-第二部分-Docker指令
首先
由于在工作中开始使用Docker和Kubernetes,作为一个初学者,我并不太了解,所以本文记录了我在各种书籍和课程中所查找和学习的内容。
在学习了一定程度的Docker之后,我计划继续学习Kubernetes的内容。
本次继续从初学者学习Docker的第一部分 – Docker是什么 – ,尝试使用各种Docker命令。
通过本文可以了解的内容
了解如何获取Docker映像并创建并运行容器时的基本命令的使用方式。正如文章标题所示,本文适合初学者。
执行环境
在Part1的文章最后,我提到了,我使用的是MacBook电脑,所以按照Docker Desktop for Mac的步骤来安装Docker Desktop。
Docker桌面版适用于Mac操作系统:https://docs.docker.com/docker-for-mac/install/
Docker桌面版适用于Windows操作系统:https://docs.docker.com/docker-for-windows/install/
适用于Linux操作系统:https://docs.docker.com/engine/install/
您可以使用以下命令来确认是否成功安装:
如果安装成功,则会显示版本信息。
$ docker --version
Docker version 20.10.20, build 9fdeb9c
Docker引擎的启动和关闭
如果按照上述的方法进行安装,我认为Docker Engine的启动和关闭将如下所示。
Mac和Windows的情况下
如果您在Mac或Windows环境下,非常简单。只需启动安装好的Docker Desktop应用程序即可。
要结束,只需关闭应用程序即可。
在Linux的情况下
Docker引擎的启动和停止需要使用root权限。分别可以使用以下命令来执行。
- 起動
sudo systemctl start docker
- 終了
sudo systemctl stop docker
- 自動起動の設定
sudo systemctl enable docker
使用nginx镜像尝试各种功能。
寻找Docker镜像
首先,我们尝试搜索已经发布的nginx镜像。
$ docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 17828 [OK]
linuxserver/nginx An Nginx container, brought to you by LinuxS… 181
bitnami/nginx Bitnami nginx Docker Image 149 [OK]
ubuntu/nginx Nginx, a high-performance reverse proxy & we… 71
bitnami/nginx-ingress-controller Bitnami Docker Image for NGINX Ingress Contr… 22 [OK]
rancher/nginx-ingress-controller 11
kasmweb/nginx An Nginx image based off nginx:alpine and in… 4
我们似乎有很多选择,但让我们选择顶部标着“Official build of Nginx”的镜像来使用吧。
获取Docker镜像
要获取实际映像,可以使用docker pull命令。
$ docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
025c56f98b67: Pull complete
ec0f5d052824: Pull complete
cc9fb8360807: Pull complete
defc9ba04d7c: Pull complete
885556963dad: Pull complete
f12443e5c9f7: Pull complete
Digest: sha256:75263be7e5846fc69cb6c42553ff9c93d653d769b94917dbda71d42d3f3c00d3
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
在调用pull之后,请指定图像名称。
展示Docker镜像
您可以使用docker images命令来显示获取的镜像。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 3964ce7b8458 4 days ago 142MB
删除Docker镜像。
要删除镜像,执行docker rmi <镜像名称>命令。
$ docker rmi nginx
Untagged: nginx:latest
Untagged: nginx@sha256:75263be7e5846fc69cb6c42553ff9c93d653d769b94917dbda71d42d3f3c00d3
Deleted: sha256:3964ce7b84589cf9bc585415741b642b7167229e0afde03f502f6c848ed3279d
Deleted: sha256:d074856927ea4224de9fa86b95620c7e4a26da5512db98ccd50cd31b972679a3
Deleted: sha256:815f0d9df09812d9a61725d270fc09f565ab24af22acbda11a953ac9740bb920
Deleted: sha256:dd1c6be5fb8e83f9dc81c628a614dee835cd881c1e244f7f893f2acc49c4fd3b
Deleted: sha256:1d76f7083f6e373335df2263cbd7e272c53df65f226bedbf4849149dddbfd9d7
Deleted: sha256:f95e777ae8eeb4c90475fda98d997771924baaf2975f406d62fa92a1a5b4e502
Deleted: sha256:b5ebffba54d3e3f7fd80435fcdc34c4a96fdb2ecab0f0a298fe08f74c2f69d29
在docker中也找不到镜像。
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
因为我想在以后继续使用,所以我会再次获取一份。
试着生成并启动一个nginx容器。
要通过映像生成和启动容器,使用docker run命令。
$ docker run -p 8080:80 --name nginx-server nginx
我认为,一旦成功运行并启动,您将无法使用命令输入。为了避免这种情况,请暂时不要慌张,打开一个新的终端。稍后将介绍如何避免这个问题。
当查看命令内容时,我听说是使用docker run来执行的,但您正在使用我没听说过的选项。让我们逐个进行检查。
-p 8080:80: 进行端口配置。将主机的8080端口(可以根据需要设置任意端口)与生成的容器的80端口进行连接。
–将生成的容器命名为nginx-server。您可以选择任意喜欢的名称。虽然不给它命名也可以运行,但是为了以后方便管理避免麻烦,我们还是给它命名吧。
nginx:最后一部分是指定要使用的镜像名称。

暂时我们已经生成并执行了一个Nginx的容器!
查看正在运行的容器列表
您可以使用docker ps命令来查看正在运行的容器列表。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dcd2fa8b5a1b nginx "/docker-entrypoint.…" 15 minutes ago Up 15 minutes 0.0.0.0:8080->80/tcp nginx-server
我们可以查看分配给容器的随机值的容器ID,原始的图像名称,状态和端口设置以及容器名称。
如果要显示所有停止的容器,包括正在停止的容器,请按如下方式操作。
$ docker ps -a
又或者
$ docker ps --all
无论哪个选项都会得到相同的结果。
停下容器
要停止容器时,请执行以下操作。
$ docker stop nginx-server
nginx-server
该容器已不再显示在启动中的容器列表中。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
当使用`docker ps -a`命令进行确认时,您可以看到状态已经变为Exited。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
dcd2fa8b5a1b nginx "/docker-entrypoint.…" 25 minutes ago Exited (0) About a minute ago nginx-server
删除已停止的容器
当你想要删除停止的容器时,请按照以下步骤进行操作。
$ docker rm nginx-server
nginx-server
当执行”docker ps -a”命令,您会发现它从列表中消失了。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
在后台启动容器。
在之前的docker run命令中,我认为您无法输入命令。要避免此问题,您可以添加-d选项以实现后台启动。
$ docker run -d -p 8080:80 --name nginx-server nginx
a81d2a5f8d7ee6c1f20e19e94919e1825a75a2a6240cd5c9d62acc2d86021bd6
进入已启动的容器的Shell。
用以下的命令进入已在后台启动的容器。
$ docker exec -it nginx-server /bin/bash
root@a81d2a5f8d7e:/#
exec:在正在运行的容器内执行指定的程序或命令。
-it:将主机的标准输入输出与容器绑定。
nginx-server:容器的名称。
/bin/bash:要执行的命令。
当你想要从集装箱中出来时,可以按照以下方法进行。
root@a81d2a5f8d7e:/# exit
exit
从主机复制文件到容器中
让我们尝试将主机文件复制到容器内的方法。首先,准备一个只写有”Hello World From Host”的index.html文件。
Hello World From Host
目前的目录下有一个名为index.html的文件。
$ ls
index.html
接下来按照以下方式执行命令。
$ docker run -d -v "$(pwd)":/usr/share/nginx/html -p 8080:80 --rm --name nginx-server nginx
0be609db1d250cf216f666bca9f946cbfd7b23df05603e4da6cf9a2540b74c20
-v “$(pwd)”:/usr/share/nginx/html: 将主机目录$(pwd)挂载到容器目录/usr/share/nginx/html。我们将其更改为包含准备好的nginx默认HTML文件。
–rm:这个选项与本次内容没有直接关系,但是它表示在停止容器时同时执行删除操作。

最后
这次我们进行了Docker基本命令的操作。
我对Docker的使用能力有了一点儿提高。
继续在第三部分。