Help us understand the problem. What is going on with this article?

WSL上のubuntuにDockerを入れてみる

WSL2上のUbuntu18.04にDockerをインストールし触ってみたので、メモを残しておきます。

作業環境

Ubuntuセットアップ

WSL2上のUbuntu構築は以下の記事にまとめています。
WSL上にUbuntu18.04を構築してみた

Dockerバージョン

19.03.13

流れ

  1. Dockerインストール
  2. Dockerコマンド諸々

1.Dockerインストール

以下サイトを参考にインストールを行います。
Ubuntu 18.04 LTS に Docker をインストールする

Dockerのリポジトリを設定する

パッケージのアップデート、必要なパッケージのインストールを実行し、Docker 公式の GPG 公開鍵をインストールします。

$ sudo apt update
$ sudo apt install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo apt-key fingerprint 0EBFCD88
$ sudo add-apt-repository \
    "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
    $(lsb_release -cs) \
    stable"

Dockerインストール

最新版のDockerをインストールします。

$ sudo apt update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

インストールの確認をします。

$ sudo docker --version
$ sudo systemctl status docker

以下はProxy設定を行う場合に実施してください。

proxy設定用ファイルを作成し、必要な設定を書き込みます。

$ sudo mkdir -p /etc/systemd/system/docker.service.d
$ sudo vi /etc/systemd/system/docker.service.d/http-proxy.conf
http-proxy.conf
[Service]
  Environment="HTTP_PROXY=http://proxy.example.com:8080/"
  Environment="HTTPS_PROXY=http://proxy.example.com:8080/"

変更を適用し、設定を反映させる。最後に設定できていることを確認します。

$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
$ systemctl show --property=Environment docker

設定ファイルに記載した情報が表示されれば完了です。

Dockerコマンドをsudo無しで実行するための設定を行います。

まずは現状の確認をします。

$ docker images

Permission Deniedでエラーになります。

Dockerグループに対象ユーザーを入れます。
一度対象ユーザーにログインしなおしてください。

$ sudo usermod -aG docker ${USER}
$ su - ${USER}

設定できたことを確認します。

$ docker images

エラーが起きなくなっていれば完了です。

2.Dockerコマンド諸々

Docker起動・停止・ステータスチェック

$ sudo systemctl start docker
$ sudo systemctl stop docker
$ sudo systemctl status docker

イメージ検索

$ docker search [OPTIONS] TERM

TERMには、httpd、mysqlなどを入れることで、提供されているレポジトリが表示されます。

例えばhttpdで検索してみます。

$ docker search httpd

以下のような結果が返ってきました。

NAME                                    DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
httpd                                   The Apache HTTP Server Project                  3261                [OK]
centos/httpd-24-centos7                 Platform for running Apache httpd 2.4 or bui…   36
centos/httpd                                                                            33                                      [OK]
arm32v7/httpd                           The Apache HTTP Server Project                  9
polinux/httpd-php                       Apache with PHP in Docker (Supervisor, CentO…   4                                       [OK]
salim1983hoop/httpd24                   Dockerfile running apache config                2                                       [OK]
solsson/httpd-openidc                   mod_auth_openidc on official httpd image, ve…   1                                       [OK]
publici/httpd                           httpd:latest                                    1                                       [OK]
clearlinux/httpd                        httpd HyperText Transfer Protocol (HTTP) ser…   1
hypoport/httpd-cgi                      httpd-cgi                                       1                                       [OK]
jonathanheilmann/httpd-alpine-rewrite   httpd:alpine with enabled mod_rewrite           1                                       [OK]
dariko/httpd-rproxy-ldap                Apache httpd reverse proxy with LDAP authent…   1                                       [OK]
lead4good/httpd-fpm                     httpd server which connects via fcgi proxy h…   1                                       [OK]
dockerpinata/httpd                                                                      0
interlutions/httpd                      httpd docker image with debian-based config …   0                                       [OK]
appertly/httpd                          Customized Apache HTTPD that uses a PHP-FPM …   0                                       [OK]
amd64/httpd                             The Apache HTTP Server Project                  0
manasip/httpd                                                                           0
trollin/httpd                                                                           0
e2eteam/httpd                                                                           0
manageiq/httpd_configmap_generator      Httpd Configmap Generator                       0                                       [OK]
itsziget/httpd24                        Extended HTTPD Docker image based on the off…   0                                       [OK]
manageiq/httpd                          Container with httpd, built on CentOS for Ma…   0                                       [OK]
ppc64le/httpd                           The Apache HTTP Server Project                  0

The Apache HTTP Server Projectが公式でhttpdという名前のイメージを公開していることがわかります。

イメージ取得

$ docker pull [OPTIONS] NAME[:TAG|@DIGEST]

先ほど検索したhttpdのイメージを取得してみます。

$ docker pull httpd

TAGを指定しなければ、latest(最新版)がpullされます。

Using default tag: latest
latest: Pulling from library/httpd
852e50cd189d: Pull complete
67d51c33d390: Pull complete
b0ad2a3b9567: Pull complete
136f1f71f30c: Pull complete
01f8ace29294: Pull complete
Digest: sha256:fddc534b7f6bb6197855be559244adb11907d569aae1283db8e6ce8bb8f6f456
Status: Downloaded newer image for httpd:latest
docker.io/library/httpd:latest

イメージ一覧表示

$ docker images [OPTIONS] [REPOSITORY]

先ほどpullしたイメージを見てみます。

$ docker images

以下の通り表示されます。

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
httpd               latest              0a30f4c29d25        4 days ago          138MB

コンテナの起動

$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

先ほどのhttpdを起動してみます。

$ docker run -d -p 8080:80 httpd

docker runコマンドを実行した際に下に表示される英数字が、コンテナIDとなり、今後このコンテナを指定する際には、このIDを指定します。
オプションの解説をしておきます。
-d:バックグラウンド実行(つけなければ、プロンプトがコンテナに奪われます。ログアウトすればホスト側に戻ってきます。)
-p:ポート指定(今回はローカルポートが8080でコンテナポートが80になっています)

別の起動方法。これで起動した場合は、プロンプトがコンテナ内のプロンプトになる。

$ docker run -p 8080:80 --name test01 -it httpd /bin/bash

--name:コンテナ名を指定
-it:image名を指定
/bin/bash:ログイン時のコマンドを指定

コンテナプロセスの確認

$ docker ps [OPTIONS]

停止中のプロセスも含めて確認するには、-aオプションを付けます。
基本的に以下のコマンドを打てばいいと思います。

$ docker ps -a

実行結果は以下のように表示されます。

CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS                      PORTS                  NAMES
cf4beeb4be04        httpd               "httpd-foreground"   3 seconds ago       Up 2 seconds                0.0.0.0:8080->80/tcp   pedantic_cohen
168d4374aa73        httpd               "/bin/bash"          7 minutes ago       Exited (0) 4 minutes ago                           test01

見方は以下の通りです。

カラム名 説明
CONTAINER ID コンテナIDの最初の12桁
IMAGE コンテナの元イメージ名
COMMAND 起動時に与えられたコマンド(起動時に末尾で指定したもの)
CREATED コンテナの作成日からの経過時間
STATUS 起動・停止のステータス
PORTS バインドしているポート(ホスト側8080:コンテナ側80)
NAMES コンテナの名前(起動時に--nameで指定したもの)

起動中コンテナへのログイン

$ docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

上記のcf4beeb4be04コンテナにログインしてみます。

$ docker exec -it cf4beeb4be04 /bin/bash

コンテナの停止

$ docker stop [OPTIONS] CONTAINER [CONTAINER...]

先ほど起動したコンテナを停止してみます。

$ docker stop 5b43901894115d72415d265488225b957050accffcb27ce16382c97479be1d75

停止中コンテナの起動

$ docker start [OPTIONS] CONTAINER [CONTAINER...]

先ほど停止したコンテナを起動してみます。

$ docker start 5b43901894115d72415d265488225b957050accffcb27ce16382c97479be1d75

コンテナの削除

$ docker rm [OPTIONS] CONTAINER [CONTAINER...]

test01コンテナを削除してみます。

$ docker rm test01

再度docker psコマンドを実行してみます。

CONTAINER ID        IMAGE               COMMAND              CREATED             STATUS                      PORTS               NAMES
cf4beeb4be04        httpd               "httpd-foreground"   17 minutes ago      Exited (0) 4 minutes ago                        pedantic_cohen

削除されていることがわかります。

イメージの削除

docker rmi [OPTIONS] IMAGE [IMAGE...]

先ほどのhttpdイメージを削除してみます。
docker imagesで表示されるコンテナIDを指定します。

docker rmi 0a30f4c29d25

再度docker imagesで削除されていれば完了です。

最後に

今回はUbuntu 18.04上に、Dockerをインストールし、Dockerの基本の「キ」レベルのコマンドをまとめてみました。
今後は構築をしながら気づいたことをまとめていきたいなと思います。

nnydtmg157
金融系SIer 2年目。これまでの経験とこれからの勉強のために、備忘録的に残していきたいと思います。 大学まで15年近く野球漬けだったため、システム知識を詰め込む毎日。。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away