尝试在Docker中进行各种操作(探索容器编辑版)2.

简述

我之前已经整理出了在Windows10中创建可使用Docker并从DockerHub获取镜像并启动容器的流程。

这次我想尝试使用Apache Httpd和MariaDB。
(虽然每次都没有提到Dockerfile。)

以下是摘要

 

前提条件 (Qianti tiaojian)

    Windows10にDocker Desktopがインストールされている状態

httpd(Apache httpd)

作为代表性的Web服务器应用程序,有「Apache HTTPD」。

 

image.png
image.png

每次都是这样,因为”latest”是指向”bullseye”的,所以我们应该使用基于Debian的镜像。

获取图像

使用 pull 命令获取 httpd 的镜像。

PS C:\> docker pull httpd:latest
latest: Pulling from library/httpd
42c077c10790: Pull complete
77a357ba66a8: Pull complete
e9e2f87fc2ce: Pull complete
0b3c9bceb738: Pull complete
de91965861a5: Pull complete
Digest: sha256:f899e432292e4ee92772d35e43b2e3dcf30042b1c6385d33f00a9300c69ee729
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest

我来查看一下图像的列表。

PS C:\> docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
httpd         latest    b260a49eebf9   4 days ago     145MB ←←←←
ubuntu        latest    27941809078c   11 days ago    77.8MB
hello-world   latest    feb5d9fea6a5   8 months ago   13.3kB

生成和启动Container

那么,现在让我们创建并启动一个容器吧。

PS C:\> docker run -d -p 8080:80 httpd
4581c939aae3c339d52477a344ad634f32af80fc7acfb560c0013d32d731b8b9

看到了一个非常陌生的选项呢。

 

首先,“-d” 是一个分离模式。
简单来说,它是一个“在后台运行”的选项。

而”-p 8080:80″是用来指定容器端口号的选项。在这种情况下,它的意思是将外部访问8080端口的流量传递给容器的80端口。

image.png
image.png

你正在行动。

image.png
image.png

通过点击这里,您也可以在浏览器中进行显示确认。

停止 Container

由于处于Detached模式,因此要停止它,需要检查Container的状态。

PS C:\> docker container ls
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS          PORTS                  NAMES
4581c939aae3   httpd     "httpd-foreground"   10 minutes ago   Up 10 minutes   0.0.0.0:8080->80/tcp   bold_ritchie
PS C:\> docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS          PORTS                  NAMES
4581c939aae3   httpd     "httpd-foreground"   10 minutes ago   Up 10 minutes   0.0.0.0:8080->80/tcp   bold_ritchie

无论是使用「container ls」还是「ps」都可以。
因为它正在运行中,所以它会被显示,不需要加上「–all」。

停止 Container 可以使用 “stop” 命令。

PS C:\> docker stop 4581c939aae3
4581c939aae3
image.png

你已经停下来了。

启动Container

上次我们学过了吧。
再次执行”run”命令,就会创建另一个容器。

因此我们将使用“开始”这个词。

PS C:\> docker start 4581c939aae3
4581c939aae3
PS C:\> docker ps
CONTAINER ID   IMAGE     COMMAND              CREATED          STATUS         PORTS                  NAMES
4581c939aae3   httpd     "httpd-foreground"   15 minutes ago   Up 3 seconds   0.0.0.0:8080->80/tcp   bold_ritchie

重點是,在起始的時候,不再需要「分離模式」或「端口指定」等選項。
這些選項是用於生成容器的時候,對於已經生成好的容器的啟動來說,是不需要的。

image.png

你的表现很出色。

MariaDB是一个开源的数据库管理系统,是MySQL的一个分支。

不是您所熟悉的MySQL,而是MariaDB。

 

image.png
image.png

最新版本是「10.8.3-jammy」。

获得图像

使用pull命令来下载MariaDB的镜像。

PS C:\> docker pull mariadb:latest
latest: Pulling from library/mariadb
405f018f9d1d: Already exists
7a85079b8234: Pull complete
579c7ff691b1: Pull complete
4976663b5d6d: Pull complete
169024b1fb13: Pull complete
c0ffe8ce897f: Pull complete
b583c09d23c3: Pull complete
9b9f0c08d08f: Pull complete
9cd51f984586: Pull complete
d9f506bb8aca: Pull complete
24d689f79ba4: Pull complete
Digest: sha256:88fcb7d92c7f61cd885c4d309c98461f3607aa6dbd57a2474be86e1956b36d13
Status: Downloaded newer image for mariadb:latest
docker.io/library/mariadb:latest

查看图像列表。

PS C:\> docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
httpd         latest    b260a49eebf9   4 days ago     145MB
mariadb       latest    ea81af801379   11 days ago    383MB
ubuntu        latest    27941809078c   11 days ago    77.8MB
hello-world   latest    feb5d9fea6a5   8 months ago   13.3kB

生成和启动容器

立即用「run」启动。

请在选项中指定其中一个:MARIADB_ROOT_PASSWORD、MARIADB_ALLOW_EMPTY_ROOT_PASSWORD或MARIADB_RANDOM_ROOT_PASSWORD(或等价的*_FILE)。其他环境变量是可选的。
PS C:\> docker run -p 3306:3306 -e MARIADB_ROOT_PASSWORD=my-secret-pw -d mariadb
0f9346bd7598d80349bce4cc83eb17df0225ab124fe178d1945df6911c453127
docker: Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:3306 -> 0.0.0.0:0: listen tcp 0.0.0.0:3306: bind: Only one usage of each socket address (protocol/network address/port) is normally permitted.

咦?MariaDB/MySQL的标准端口号3306不能被启用吗?

哎呀,我在这台电脑上安装并运行着MySQL…可能是端口冲突吧…

image.png

既存的失败作品,将其删除,并将端口号更改为“3306 → 3808(随意)”,然后重新创建容器。

PS C:\> docker run -p 3808:3306 -e MARIADB_ROOT_PASSWORD=my-secret-pw -d mariadb
759f00f551ff09067ebf088407e2ad7de88aae01a71356d3d579eb79e2dc9757
PS C:\> docker ps --all
CONTAINER ID   IMAGE           COMMAND                  CREATED              STATUS                    PORTS                    NAMES
759f00f551ff   mariadb         "docker-entrypoint.s…"   About a minute ago   Up About a minute         0.0.0.0:3808->3306/tcp   crazy_ritchie
4581c939aae3   httpd           "httpd-foreground"       14 hours ago         Up 14 hours               0.0.0.0:8080->80/tcp     bold_ritchie
89b3f9ec5f9b   ubuntu:latest   "bash"                   34 hours ago         Exited (0) 34 hours ago                            magical_hellman

你已经启动了。
当你查看Docker Desktop时,是这种情况。

image.png
image.png

那么,我们要怎样确认呢……既然“MySQL已经安装并且端口冲突”的情况下,要不要试试用MySQL的工具来进行连接呢……

首先,启动MySQL Workbench。

MySQL Workbench是一款可以以图形方式操作MySQL的工具。
https://dev.mysql.com/downloads/workbench/
image.png
image.png
    • Connection Name:適当でいいです。今回は「MariaDB Test」にしてみました

 

    Port:標準の「3306」を「3808」に変更したので、書き換えます
image.png
image.png
image.png

虽然出现了警告,但我会忽略它。(虽然检测到了Ver10.8.3,但这个工作台也能正常适配。就按下“继续进行”按钮吧。)

image.png

不,我没有安装MySQL,所以我在默认的3306端口上创建了一个容器,让我确认一下…

如果是那种情况,我们会按照这种方式进行。
(或者说,对于没有使用“-p 3808:3306”的人。也就是说,包括那些不从外部进行使用的人。)

image.png
image.png

虽然是类似的东西,但也可以使用”exec”命令来执行。
“exec”命令需要最少两个以上的参数,所以我写了”mysql”命令,但是在Docker Desktop中看来也可以使用”/bin/sh”。

PS C:\> docker exec -it 759f00f551ff mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 17
Server version: 10.8.3-MariaDB-1:10.8.3+maria~jammy mariadb.org binary distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

顺便说一下,和MySQL一样,退出的命令是“\q”。

MariaDB [(none)]> \q
Bye

停止容器 / 启动容器

容器的停止和启动与httpd时相同。

逐渐我能够熟练地整理Docker了。
下一步,我打算开始使用Dockerfile和Docker-compose。

广告
将在 10 秒后关闭
bannerAds