Docker我开始使用了

师傅说:“我们在进行环境构建时可以使用Docker。”
我说:“知道了!!!(Docker…?)”
于是我开始研究Docker。

Docker 是什么

仅需要一种选择,以下内容的中文本土释义如下:

Docker入門(第一回)~Dockerとは何か、何が良いのか~

要約

    • Dockerは、コンテナ型の仮想環境を配布・実行するためのプラットフォーム。

仮想マシンとは違う。

仮想マシン
ホストマシン上でハイパーバイザを利用してゲストOSを動かす。そのうえでミドルウェアなどを動かす。
Docker
ホストマシンのカーネルを利用して、プロセスやユーザを隔離する。従って軽量・高速。

ミドルウェアのインストールや各種環境設定をコード化して管理する。

コード化されたファイルを共有することで、どこでも誰でも同じ環境が作れる。
作成した環境を配布しやすい。
スクラップ&ビルドが容易にできる。

Dockerイメージは、Web上のDocker Hubで公開されている。
Dockerイメージを取得すれば、すでに必要なミドルウェアなどがインストールされているDockerコンテナを起動できる。

我的印象

仮想マシンより軽快に動くらしい。確かに仮想マシンってもっさりしている印象あるよね。
「コード化して管理」ってなんか今風な感じ。
いまいちイメージわかないけど、とりあえず触ってみよう。

Docker安装,启动容器

借鉴

Docker入门(第二篇)~ Docker安装配置,启动容器~

安装Docker

迷上了。
举例来说,虽然我喜欢Linux,但尝试安装在Amazon Linux2上。
无论怎么做,
sudo amazon-linux-extras install docker
总是失败。

失敗例
# sudo amazon-linux-extras install docker
Installing docker
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Cleaning repos: amzn2-core amzn2extra-docker docker-ce-stable
12 metadata files removed
6 sqlite files removed
0 metadata files removed
(略)
Resolving Dependencies
--> Running transaction check
---> Package docker.x86_64 0:18.09.9ce-2.amzn2 will be installed
--> Processing Dependency: runc = 1.0.0 for package: docker-18.09.9ce-2.amzn2.x86_64
--> Processing Dependency: containerd = 1.2.6 for package: docker-18.09.9ce-2.amzn2.x86_64
--> Processing Dependency: pigz for package: docker-18.09.9ce-2.amzn2.x86_64
--> Processing Dependency: libcgroup for package: docker-18.09.9ce-2.amzn2.x86_64
--> Running transaction check
---> Package containerd.io.x86_64 0:1.2.13-3.1.el7 will be installed
--> Processing Dependency: container-selinux >= 2:2.74 for package: containerd.io-1.2.13-3.1.el7.x86_64
---> Package libcgroup.x86_64 0:0.41-21.amzn2 will be installed
---> Package pigz.x86_64 0:2.3.4-1.amzn2.0.1 will be installed
--> Finished Dependency Resolution
Error: Package: containerd.io-1.2.13-3.1.el7.x86_64 (docker-ce-stable)
           Requires: container-selinux >= 2:2.74
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest
Installation failed. Check that you have permissions to install.

我查了一下,发现了这篇文章。
原来如此,原来是因为docker-ce.repo文件的问题。
为什么要直接引用CentOS的文章呢,我反省。

删除并重新执行一次
sudo amazon-linux-extras install docker
就可以了。嗯嗯,我知道我知道。

Dockerを動かしてみる

准备好了

Dockerサービス起動
# systemctl start docker.service

サービスの起動確認
# systemctl status docker

Dockerの自動起動設定
# systemctl enable docker

試しにDockerコマンド実行
# docker info

这个地方没有什么问题,一切顺利进行。

DockerイメージとDockerコンテナ

    • まず、Dockerイメージがある。

 

    Dockerイメージをもとに、Dockerコンテナを起動する。

初期状態

イメージ一覧を表示
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

初期状態では、イメージはない。
従ってヘッダーのみが表示されている。

コンテナ一覧を表示
# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

コンテナも起動していないため、ヘッダーのみが表示されている。

使用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:fc6a51919cfeb2e6763f62b6d9e8815acbf7cd2e476ea353743570610737b752
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/
イメージ一覧を表示
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              fce289e99eb9        14 months ago       1.84kB

确认已添加图像。

コンテナ一覧を表示
# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS                          PORTS               NAMES
24c4702a238c        hello-world         "/hello"            About a minute ago   Exited (0) About a minute ago                       laughing_pascal

コンテナも起動していることを確認。
「STAUS」が「Exited」になっているため、正確には停止している。
(hello-worldイメージは、MSGを出漁するだけなので停止で問題ない。)

删除镜像和容器

コンテナ削除
# docker rm <コンテナ名>
 もしくは
# docker rm <CONTAINER ID>
イメージ一覧を表示
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              fce289e99eb9        14 months ago       1.84kB

形象尚未消失。

コンテナ一覧を表示
# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

集装箱已经消失。

イメージ削除
# docker rmi <イメージ名>
 もしくは
# docker rmi <IMAGE ID>
イメージ一覧を表示
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

形象也消失了。

コンテナ一覧を表示
# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

当然,容器已经消失了。

使用Nginx图像

Nginxイメージの取得
# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
68ced04f60ab: Pull complete
c4039fd85dcc: Pull complete
c16ce02d3d61: Pull complete
Digest: ***
Status: Downloaded newer image for nginx:latest

Nginxコンテナの起動
# docker run -d --name nginx-container -p 8181:80 nginx

启动选项如下。

オプション意味-dバックグラウンド実行–name <任意の名前>コンテナ名を指定-p <ホスト側のPORT>:<コンテナ側のPORT>PORTを指定

只需要一个选项来用中文本地化地改写以下内容:

通过http://<服务器IP>:8181/可以访问Nginx。
(如果是EC2服务器,需要更改安全组设置)

有关Docker命令的内容

请参考

Docker入门(第三部)- Docker命令和Docker镜像创建的各种操作

使用不同的指令進行操作。

    • Dockerイメージ取得、イメージ一覧確認

 

    • コンテナ起動、コンテナ一覧確認

 

    • コンテナへのログイン

 

    • ファイルコピー(ホスト→コンテナ内)

 

    • ファイルコピー(コンテナ内→ホスト)

 

    • コンテナからDockerイメージ作成

 

    • コンテナ起動、停止

 

    コンテナ削除

只需参考链接即可省略。

ホスト側とのディレクトリ共有

起動時にvオプションをつけることで、ホスト側のディレクトリとコンテナ内のディレクトリを共有することが可能。
使用例としては、ログの出力先など。
例えばコンテナ内でログを出力していた場合、コンテナの停止とともに消えてしまうため。

オプション意味-v <ホスト側ディレクトリ>:<コンテナ側ディレクトリ>両ディレクトリを共有にする
ディレクトリ共有した状態で起動
# docker run -it -d -p 18080:8080 -v /root/tomcat-container/logs:/share/logs --name tomcat centos:7

创造图像

虽然迄今为止我们是通过想象来创建容器,但也可以从容器中创建影像。

コンテナの停止(やらなくても作成できるみたい。停止したほうが安全?)
# docker stop nginx-container

nginx-containerコンテナから、nginx2イメージを作成
# docker commit nginx-container nginx_2

イメージを確認
# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx_2             latest              4a4ce52ad449        6 seconds ago       127MB
nginx               latest              a1523e859360        6 days ago          127MB

试着从创建的nginx_2镜像中启动容器。

Nginx_2コンテナの起動
# docker run -d --name nginx2-container -p 8182:80 nginx_2

起動したコンテナの確認
# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
53e414bab96d        nginx_2             "nginx -g 'daemon of…"   41 seconds ago      Up 39 seconds       0.0.0.0:8182->80/tcp   nginx2-container
4e29184909ff        nginx               "nginx -g 'daemon of…"   29 hours ago        Up 29 minutes       0.0.0.0:8181->80/tcp   nginx-container

確認できたので止める
# docker stop nginx2-container

停止の確認
# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                  NAMES
53e414bab96d        nginx_2             "nginx -g 'daemon of…"   2 minutes ago       Exited (0) 9 seconds ago                          nginx2-container
4e29184909ff        nginx               "nginx -g 'daemon of…"   29 hours ago        Up 31 minutes              0.0.0.0:8181->80/tcp   nginx-container

コンテナの削除
# docker rm nginx2-container

削除の確認
# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
4e29184909ff        nginx               "nginx -g 'daemon of…"   29 hours ago        Up 31 minutes       0.0.0.0:8181->80/tcp   nginx-container

关于Dockefile的问题

请参照下列选项中的一项以中文进行改述:

Docker基础(第四章)~关于Dockerfile~

Dockerfile 是什么?

公開されているDockerイメージに、「必要なパッケージやアプリを追加する」「各種設定をする」など少し手を加えておきたい場合に使用するもの。
Dockerfile内に、実行したい内容を記述する。

尝试使用Dockerfile。

…と思ったけど、参考記事の例はtomcatだしちょっと微妙かなと。
どうせならLaravel環境作成したりしたいなと。

そんなことを思ってたらこんなものがあった。
Dockerを使ってLaravel開発環境構築
最高っす。ドンピシャっす。
というわけで、実際に動かすのは別の機会にすることにした。

关于容器之间通信的问题

请提供更具体的内容以便准确回答。

Docker入门(第五节)- 容器之间的通信

容器间通信

要让容器之间进行通信,有以下两种方法:
1. 创建Docker网络,并通过容器名称进行连接。
2. 使用–link选项启动容器。

创建Docker网络

例如,创建一个Docker网络(桥接类型)。
有关其他类型,请参阅这里。

「network1」というDockerネットワークを作成
# docker network create network1

Dockerネットワークの一覧を表示
# docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
064b0ea3a75c        bridge              bridge              local
7281bec71e9e        host                host                local
3585fc587596        network1            bridge              local
272c5bc211eb        none                null                local

可以确认存在「network1」。
虽然默认存在「bridge」,但由于未进行 DNS 设置无法解析名称,似乎无法使用容器名称进行容器间通信。

Dockerネットワークの詳細を表示
# docker network inspect network1
[
    {
        "Name": "network1",
        "Id": "3585fc587596ba17195364d8aea2e77add0978813782bfb21b15486153df109c",
        "Created": "2020-03-04T17:38:12.168101241Z",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": {},
            "Config": [
                {
                    "Subnet": "172.18.0.0/16",
                    "Gateway": "172.18.0.1"
                }
            ]
        },
        "Internal": false,
        "Attachable": false,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {},
        "Labels": {}
    }
]
「network1」を使用したコンテナを作成
# docker run -d --name nginx3-container --network network1 -p 8183:80 nginx_2

起動したコンテナを確認
# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
20158137a4ce        nginx_2             "nginx -g 'daemon of…"   3 seconds ago       Up 1 second         0.0.0.0:8183->80/tcp   nginx3-container
1487009fb41a        nginx_2             "nginx -g 'daemon of…"   12 minutes ago      Up 12 minutes       0.0.0.0:8182->80/tcp   nginx2-container
4e29184909ff        nginx               "nginx -g 'daemon of…"   35 hours ago        Up 6 hours          0.0.0.0:8181->80/tcp   nginx-container

若要进行容器之间的通信,请指定容器内部使用的端口号。

如果使用以下命令创建MySQL容器,主机端口将为19090,容器内端口将为9090。

# docker run --name mysql --network wordpress-network -p 19090:9090 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7

この場合、コンテナ間通信で指定するPORTは「9090」となる。

通过链接选项进行通信

あらかじめ、mysqlコンテナを「some-mysql」という名前で作成
# docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7

--linkオプションを用いて「some-mysql:mysql(wordpressコンテナ内で使用しているMySQLのホスト名)」を指定
# docker run --name some-wordpress -e WORDPRESS_DB_PASSWORD=my-secret-pw --link some-mysql:mysql -d -p 8080:80 wordpress

关于Docker Compose

请提供更具体的内容或句子进行翻译。

Docker入門(第六节)- Docker Compose

Docker Compose 是什么?

Docker Compose是一个工具,用于更方便地对由多个容器组成的应用程序进行Docker镜像构建以及各个容器的启动和停止等操作。

可以同时启动多个容器,也可以选择省略选项的东西(?)

Docker Composeのインストール

Dockerがインストールされている環境で以下を実行
# curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
# chmod +x /usr/local/bin/docker-compose

Docker Composeのインストールを確認
# docker-compose --version
docker-compose version 1.21.2, build a133471

关于docker-compose.yml

Docker Composeを使用する場合、「docker-compose.yml」というファイルが必要となる。
このファイルには、以下のような情報を定義する。
– Dockerイメージをビルドするための情報(使用するDockerfile、イメージ名など)
– コンテナ起動するための情報(ホストとの共有ディレクトリ設定やポートフォワードなどの起動オプションなど)
– 使用するDockerネットワーク

使用run命令启动MySQL和WordPress容器

# docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7
# docker run --name some-wordpress -e WORDPRESS_DB_PASSWORD=my-secret-pw --link some-mysql:mysql -d -p 8080:80 wordpress

如果将这个写入到”docker-compose.yml”文件中,就像下面这样。

version: '3'
services:

  wordpress:
    image: wordpress
    container_name: some-wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_PASSWORD: my-secret-pw

  mysql:
    image: mysql:5.7
    container_name: some-mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: my-secret-pw

如果使用自己创建的(非公开)Docker镜像(例如)。

version: '3'
services:
  tomcat:
    build: ./tomcat
    image: tomcat-image
    container_name: tomcat1
    ports:
      - 8081:8080
    volumes:
      - ./tomcat/share/logs:/share/logs

runコマンドのオプションと「docker-compose.yml」の記載内容を比較すると、以下の通り。

設定内容runコマンドのオプションdocker-compose.ymlコンテナ名–namecontainer_name環境変数-eenvironmentポートフォワード-pports使用するDockerイメージコマンドの最後imageDockerfileの指定docker buildコマンドbuild共有ディレクトリ-vvolumes:

「–link」オプションに対応するものはないが、そもそも「docker-compose.yml」を使用した場合は自動でDockerネットワークを作成するため、自動でservice名で名前解決ができるようになっている。

「docker-compose.yml」を使用してコンテナを起動する。

# cd <docker-compose.ymlが置かれているディレクトリ>

docker-composeによる起動
# docker-compose up -d

起動の確認
# docker-commpose ps
Name                   Command               State          Ports
------------------------------------------------------------------------------
some-mysql       docker-entrypoint.sh mysqld      Up      3306/tcp, 33060/tcp
some-wordpress   docker-entrypoint.sh apach ...   Up      0.0.0.0:8080->80/tcp

接下来,尝试构建Laravel环境。

广告
将在 10 秒后关闭
bannerAds