尝试在Docker中进行各种操作(探索容器编辑版)2.
简述
我之前已经整理出了在Windows10中创建可使用Docker并从DockerHub获取镜像并启动容器的流程。
这次我想尝试使用Apache Httpd和MariaDB。
(虽然每次都没有提到Dockerfile。)
以下是摘要
前提条件 (Qianti tiaojian)
- Windows10にDocker Desktopがインストールされている状態
httpd(Apache httpd)
作为代表性的Web服务器应用程序,有「Apache HTTPD」。
每次都是这样,因为”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端口。
你正在行动。
通过点击这里,您也可以在浏览器中进行显示确认。
停止 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
你已经停下来了。
启动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
重點是,在起始的時候,不再需要「分離模式」或「端口指定」等選項。
這些選項是用於生成容器的時候,對於已經生成好的容器的啟動來說,是不需要的。
你的表现很出色。
MariaDB是一个开源的数据库管理系统,是MySQL的一个分支。
不是您所熟悉的MySQL,而是MariaDB。
最新版本是「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」启动。
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…可能是端口冲突吧…
既存的失败作品,将其删除,并将端口号更改为“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时,是这种情况。
那么,我们要怎样确认呢……既然“MySQL已经安装并且端口冲突”的情况下,要不要试试用MySQL的工具来进行连接呢……
首先,启动MySQL Workbench。
https://dev.mysql.com/downloads/workbench/
-
- Connection Name:適当でいいです。今回は「MariaDB Test」にしてみました
- Port:標準の「3306」を「3808」に変更したので、書き換えます
虽然出现了警告,但我会忽略它。(虽然检测到了Ver10.8.3,但这个工作台也能正常适配。就按下“继续进行”按钮吧。)
不,我没有安装MySQL,所以我在默认的3306端口上创建了一个容器,让我确认一下…
如果是那种情况,我们会按照这种方式进行。
(或者说,对于没有使用“-p 3808:3306”的人。也就是说,包括那些不从外部进行使用的人。)
虽然是类似的东西,但也可以使用”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。