学习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:最后一部分是指定要使用的镜像名称。

image.png

暂时我们已经生成并执行了一个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:这个选项与本次内容没有直接关系,但是它表示在停止容器时同时执行删除操作。

image.png

最后

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

广告
将在 10 秒后关闭
bannerAds