首次使用Docker
这个教程旨在从连Docker这个词都是首次听到的水平上,一直到大概是这种感觉为止。
目标/对象
对于没有使用过Docker的人来说,如果是CUI命令的话,我能够稍微理解一点。
简要概括
Docker是一种”容器化虚拟化技术”。大家可能听说过服务器的虚拟化这个词吧。简单来说,就是在计算机内部启动另一个计算机(虚拟机)。
传统的虚拟化是在主机操作系统(安装在机器上的操作系统)上利用称为虚拟机监管器的虚拟化软件来启动客户机操作系统。
Docker的”容器化虚拟化”不需要启动客户机操作系统。它创建了一个包含各种中间件的执行环境,称为容器,并在其中运行应用程序。
正如前面所述,不需要启动客户机操作系统,因此实现了比传统方式更轻量的操作。
え?それだけ?
ちがいます。DockerはたちあげるコンテナをDockerfileやDocker-compose.ymlといった’設計書’に記述できます。つまりこの設計書をGitHubにあげてcloneしてもらったらそのひとも同じ環境のコンテナを立ち上げられるということです。
自分はMySQLが8系だったがチームメンバーは5系で開発してたからエラーがおこったとかいう問題がおこらないのです。
しかもDockerにはDocker専用のコンテナ共有サービス「DockerHub」も用意されます。使い方はGitHubを使ったことがある人ならそれなりに使えると思います。
既然詳細和优点都太多了,就请阅读先人们的文章吧(请阅读)。现在先试着运行一下吧。
准备
让我们尝试安装Docker吧
Mac:https://docs.docker.com/docker-for-mac/install/
Win10Pro:https://docs.docker.com/docker-for-windows/install/
Win10Home以下:https://github.com/docker/toolbox/releases
如果使用Win10Home,請下載github上的DockerToolbox-18.09.3.exe。
如果使用Mac,則需要使用sudo命令。
接下来只需按照平常的安装步骤进行即可。
实践
你好世界!
先打开终端或命令提示符。
Win10Home安装后会出现在桌面上的Docker快速启动终端,
尝试输入以下命令。
$ docker run hello-world
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
1b930d010525: Pull complete
Digest: sha256:0e11c388b664df8a27a901dce21eb89f11d8292f7fca1b3e3c4321bf7897bffe
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
こんな感じのが出れば成功です。
このログを大雑把の説明すると
「ローカルにhello-worldのimageないからプルしてくるね。ダウンロードできた。
コンテナ立ち上げるね。
Hello from Docker!
次は”$ docker run -it ubuntu bash”ってコマンド試してみて」
です。
言い忘れていました。imageというのは設計書とコンテナの間にはいるものです。文字通りコンテナのイメージです。一旦はそれでいいです。
让我们看看当前正在运行的容器。您可以使用 $ docker container ls -a 命令来确认。由于hello-world是一个输出后即停止的容器,如果没有-a选项,您将看不到所有容器的显示。
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
affc00b91aec hello-world "/hello" 5 seconds ago Exited (0) 5 seconds ago affectionate_sinoussi
hello-worldというimageからつくられたaffc00b91aecというコンテナがありますね
次にイメージ一覧も見てみましょう
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest fce289e99eb9 5 months ago 1.84kB
您也可以删除不再需要的容器和镜像。
$ docker container rm affc00b91aec
或者
$ docker container rm a
のように頭文字してでもできます。
同様にイメージも削除してみます。
$ docker image rm f
Untagged: hello-world:latest
Untagged: hello-world@sha256:0e11c388b664df8a27a901dce21eb89f11d8292f7fca1b3e3c4321bf7897bffe
Deleted: sha256:fce289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e
Deleted: sha256:af0b15c8625bb1938f1d7b17081031f649fd14e6b233688eea3c5483994a66a3
Ubuntu开机
接下来,让我们尝试一下之前hello-world向我们提到的命令。
$ docker run -it ubuntu bash
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
6abc03819f3e: Pull complete
05731e63f211: Pull complete
0bd67c50d6be: Pull complete
Digest: sha256:f08638ec7ddc90065187e7eabdfac3c96e5ff0f6b2f1762cf31a4f49b53000a5
Status: Downloaded newer image for ubuntu:latest
root@2e88c2d2aac5:/#
这看起来像是一个装有Ubuntu操作系统的容器。如果您最后在root目录中能够登录成功,那就可以确定了。您可以尝试运行ls命令来确认是否更像一个操作系统。
root@2e88c2d2aac5:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
看起来很相似。如果是通过CUI进行操作,您可以在这里完成一系列任务。
root@2e88c2d2aac5:/# touch hoge
root@2e88c2d2aac5:/# ls
bin boot dev etc hoge home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
假设你按照这样的感觉创建了某个文件。
让我们按下退出容器的命令“ctrl+pq”,先退出一次,然后再进入一次试试看。
root@2e88c2d2aac5:/# ls
bin boot dev etc hoge home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@2e88c2d2aac5:/#
(省略) MINGW64 /c
$ docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
2e88c2d2aac5 ubuntu "bash" 21 minutes ago Up 21 minutes heuristic_hofstadter
keita@DESKTOP-MIO6JRP MINGW64 /c
$ docker container exec -it 2 bash
root@2e88c2d2aac5:/# ls
bin boot dev etc hoge home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
我看到hoge了。这意味着我能够再次登录之前编辑过的容器。除了使用exec命令登录外,还有一个叫作attach的方法,但使用它会连接到父进程,建议尽量不要使用。
当使用exec登录后想要退出时,请使用exit命令。
root@2e88c2d2aac5:/# exit
exit
我认为你已经大致了解了Docker的基本功能。
让我们以目前的方式继续,尝试一下Docker文件和Docker Compose。