Software DesignでDockerを知ってコマンドが覚えられないので自分用に使ってみたまとめです。 みなさんの役にも立つと思い記事にしました。
Dockerのインストールと設定
インストール
sudo dnf install docker
サービスの起動
sudo systemctl start docker sudo systemctl enable docker
ユーザー権限でDockerを扱う方法
Fedoraデフォルトでは
sudo groupadd docker
sudo usermod -g docker kenken
Docker公式のチュートリアル
とりあえず Dokerのチュートリアルを読んで遊びましょう。
Dockerイメージの取得pull
Dockerイメージを取得するにはpullコマンドを使います。
docker pull centos
イメージの確認images
docker images
コンテナの実行runコマンド
docker run centos
- centos ソフトウェアのイメージを持っているか確認。
- Docker Hub からイメージをダウンロード。
- コンテナにイメージを載せて(読み込んで)「実行」する。
docker run -it centos /bin/bash
[root@cee81536ebd5 /]#
Ctrl+p,Ctrl+qを押すとコンテナが起動したままホストの操作に戻る事が出来ます。そのままexitするとコンテナが終了します。
イメージだけ指定してrunコマンドを実行すると自動でタグ付けされます。また、IDも自動で割り振られます。IDは数字とアルファベットのランダムなものが割り振られますが、タグはユーザーにわかりやすい名前がつけられます。
--nameをつけると任意のコンテナ名がつけられます。
docker run -it --name mycentos centos /bin/bash
-itオプションは以下の意味です。
-i | コンテナの標準入力を開く。/bin/bashなどでコンテナを操作する際に指定。 |
-t | tty(端末デバイス)を確保する。/bin/bashなどでコンテナを操作する際に指定。 |
-d | バックグラウンドで実行する。 |
-dでバックグラウンドで動作
コンテナをバックグラウンドで実行するには、-dオプションを用いて、
docker run -it -d
docker run -it -d centos
参考: CoreOS dockerのコマンド - 忘れないうちにメモしよう。
コンテナ停止後そのコンテナを削除-rm
docker run -rm -it centos /bin/bash
docker run -rm -it [イメージID]or[イメージ名] /bin/bash
ホストのディレクトリをコンテナにマウントする-v
docker run -it -v [ホストディレクトリ]:[コンテナディレクトリ] [イメージ名] /bin/bash
docker run -it -v /home/kenken/docker/centos:/root/test centos /bin/bash
コンテナに環境変数を設定する-e
-e [変数名]=[値]でコンテナに環境変数を設定出来ます。下記の例はDocker公式のMySQLを扱う例です。
説明のためmysql準備します。
docker pull mysql
docker run -d --name mymysql -e MYSQL_ROOT_PASSWORD=root mysql
コンテナ同士を連携させる--link
docker pull wordpress
docker run -d --name wordpress -p 8000:80 --link mymysql:mysql wordpress
コンテナの稼働状況を確認するpsコマンド
確認
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2121ae973b64 centos "/bin/bash" 4 seconds ago Up 2 seconds stupefied_mirzakhani d94e92c4254d centos "/bin/bash" 5 minutes ago Up 5 minutes evil_murdock cee81536ebd5 centos "/bin/bash" 31 minutes ago Up 31 minutes compassionate_lumiere
停止しているコンテナも表示する
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2121ae973b64 centos "/bin/bash" 4 minutes ago Up 4 minutes stupefied_mirzakhani 4cb9d5fafd5c centos "/bin/bash" 9 minutes ago Exited (0) 9 minutes ago prickly_archimedes d94e92c4254d centos "/bin/bash" 9 minutes ago Up 9 minutes evil_murdock e32ac9745879 centos "-d" 9 minutes ago Created elegant_williams cee81536ebd5 centos "/bin/bash" 35 minutes ago Up 35 minutes compassionate_lumiere
コンテナの停止stop
docker stop [コンテナID]or[コンテナ名]
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2121ae973b64 centos "/bin/bash" 4 minutes ago Up 4 minutes stupefied_mirzakhani 4cb9d5fafd5c centos "/bin/bash" 9 minutes ago Exited (0) 9 minutes ago prickly_archimedes d94e92c4254d centos "/bin/bash" 9 minutes ago Up 9 minutes evil_murdock e32ac9745879 centos "-d" 9 minutes ago Created elegant_williams cee81536ebd5 centos "/bin/bash" 35 minutes ago Up 35 minutes compassionate_lumiere
コンテナ名で停止させるにはNAMESの項目を指定します。 例えば上の例だと
docker stop compassionate_lumiere
IDの項目を指定するならば、
docker stop d94e92c4254d
コンテナの削除rm
指定して削除
docker rm [イメージID]or[イメージ名]
例を示すと
docker rm compassionate_lumiere
コンテナが停止していないのに削除しようとするとエラーが出ます。
docker rm 2121ae973b64
Error response from daemon: You cannot remove a running container 2121ae973b649a57f47162993d55e36442247821b10fcd08d0585efa603a9c3c. Stop the container before attempting removal or use -f
停止していなくても削除するにはエラーメッセージのように-fオプションをつけます。
docker rm -f 2121ae973b64
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e32ac9745879 centos "-d" 20 minutes ago Created elegant_williams cee81536ebd5 centos "/bin/bash" 46 minutes ago Up 46 minutes compassionate_lumiere
docker stopでコンテナを停止すれば、コンテナを削除出来ます。
docker stop [コンテナID]or[コンテナ名] docker rm [コンテナID]or[コンテナ名]
docker stop compassionate_lumiere docker rm compassionate_lumiere
すべてのコンテナ削除
docker rm $(docker ps -qa)
イメージの削除rmi
docker rmi [イメージID]or[イメージ名]
docker images
docker.io/mysql latest f3694c67abdb 9 days ago 400.1 MB docker.io/hello-world latest 48b5124b2768 13 days ago 1.84 kB docker.io/centos latest 67591570dd29 6 weeks ago 191.8 MB docker.io/fedora latest a1e614f0f30e 6 weeks ago 197.1 MB docker.io/hello-world latest 48b5124b2768 13 days ago 1.84 kB
イメージを削除するには
docker rmi hello-world
すべてのイメージを削除するには (実行するときは要注意
docker rmi $(docker images -qa)
コンテナ内への操作attach,exe
などとコンテナを起動させている状態で
docker attach [コンテナID]or[コンテナ名]
docker exec -it [コンテナID]or[コンテナ名] ps aux
docker attach はコンテナ内の[PID 1]のプロセスに対して接続します。 コンテナ実行時に-i、-tオプションを指定していれば、ログの出力やキーボードからの入力を受付られます。[Ctrl]+[C]、[Ctrl]+[d]などを入力するとシグナルが[PID 1]に直接送信され、プロセスが停止することがあるため注意が必要です。 (centosイメージから作ったコンテナは[Ctrl]+[d]でプロセスが停止しコンテナが終了します。) コンテナを終了させずにホストのプロセスに戻るには前述した[Ctrl]+[p]、[Ctrl]+[q]を押します。
docker execはコンテナに新しいプロセスを追加して実行します。docker attachとは違って別プロセスを追加するのでデバック時に重宝するコマンドです。別プロセスのため/bin/bashプロセスが終了するだけなのでコンテナは停止しない。
execの動作確認
docker run -it cnetos /bin/bash
docker exec -it compassionate_lumiere /bin/bash
コンテナにログインされたあと
ps -ef
PID TTY STAT TIME COMMAND 1 ? Ss+ 0:00 /bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sb 14 ? Ss 0:00 /bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sb 29 ? R+ 0:00 ps -xe HOSTNAME=cee81536ebd5 TERM=xterm LS_COLORS=rs=
と別プロセスが実行されている(この場合だとPID14)。 コンテナも終了しない。
コンテナの情報(IPなど)
コンテナの情報を表示します。IPAdressが見られます。(サーバー環境を起動させないとIPアドレスが見えない?
docker inspect [コンテナID]or[コンテナ名]
docker inspect e32ac9745879ea0793c17bc
{ "Id": "e32ac9745879ea0793c17bc9802a01663a5df1fc6ffd422a82971859edcb2c78", "Created": "2017-01-26T09:52:33.652372061Z", "Path": "-d", "Args": [], "State": { "Status": "created", "Running": false, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 0, "ExitCode": 127, 以下省略
起動してるコンテナすべてのIPアドレスを見るには、
docker inspect `docker ps -l -q` | grep IPAddress | cut -d '"' -f 4
172.17.0.3 172.17.0.3
停止しているコンテナの起動start
startコマンドを使うと現在停止しているコンテナを起動させる事が出来ます。
docker start [コンテナID]or[コンテナ名]
docker stop compassionate_lumiere
オプションが指定されないとコマンド操作が出来ません。
docker start compassionate_lumiere
-a, --attach
起動と同時にコンテナへアタッチします。このオプションで起動した場合はコマンド操作などは出来ません。[Ctrl]+[c]でコンテナを抜ける必要があります。
docker start -a [コンテナID]or[コンテナ名]
-i, --interactive
起動と同時にコンテナにアタッチします。このオプションで接続した場合はインタラクティブモードとなるため、継続してコマンド操作などが可能です。
docker start -i [コンテナID]or[コンテナ名]
イメージの履歴
docker history [イメージID]or[イメージ名]
docker history centos
IMAGE CREATED CREATED BY SIZE COMMENT 67591570dd29 6 weeks ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B6 weeks ago /bin/sh -c #(nop) LABEL name=CentOS Base Ima 0 B 6 weeks ago /bin/sh -c #(nop) ADD file:940c77b6724c00d420 191.8 MB 4 months ago /bin/sh -c #(nop) MAINTAINER https://github. 0 B
コンテナのログを表示する
dcoker logs [コンテナID]or[コンテナ名]
docker logs compassionate_lumiere
[root@cee81536ebd5 /]# ls anaconda-post.log dev home lib64 media opt root sbin sys usr bin etc lib lost+found mnt proc run srv tmp var [root@cee81536ebd5 /]# exit [root@cee81536ebd5 /]# exit [root@cee81536ebd5 /]# ^C [root@cee81536ebd5 /]# ^C [root@cee81536ebd5 /]# ^C [root@cee81536ebd5 /]# exit [root@cee81536ebd5 /]# ls anaconda-post.log dev home lib64 media opt root sbin sys usr bin etc lib lost+found mnt proc run srv tmp var [root@cee81536ebd5 /]# ps PID TTY TIME CMD 1 ? 00:00:00 bash 17 ? 00:00:00 ps [root@cee81536ebd5 /]# ps -a PID TTY TIME CMD 18 ? 00:00:00 ps [root@cee81536ebd5 /]# [root@cee81536ebd5 /]# ps -aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.3 0.0 11776 2772 ? Ss 03:16 0:00 /bin/bash root 19 0.0 0.0 47448 3236 ? R+ 03:16 0:00 ps -aux [root@cee81536ebd5 /]# exit
上の例のようにコンテナでのコマンド履歴が表示されるので便利。 Dockerfileを書くときにも役立ちますね。
コンテナのプロセスを表示するtop
起動しているコンテナのプロセスを表示します。
docker top [コンテナID]or[コンテナ名]
docker top compassionate_lumiere
docker top 60bf1a7ccfcb UID PID PPID C STIME TTY TIME CMD root 28962 28946 0 1月27 pts/3 00:00:00 /bin/bash
コンテナをコミットcommit
docker commit [コンテナID]or[コンテナ名] [リポジトリ[:タグ]]
docker commit compassionate_lumiere kenkenspin/centos
docker images|head
REPOSITORY TAG IMAGE ID CREATED SIZE kenkenspin/centos latest 49e094b24ffb 46 seconds ago 294.7 MBa1fea63d0b4a 5 minutes ago 294.7 MB kenkenspin/centos httpd e0e6867a47b7 3 days ago 316 MB kenkenspin/spin latest 3d54e097a985 4 days ago 561 MB
Dockerfileからbuild
docker build -t [イメージID:tag]or[イメージ名:tag] .
カレントディレクトリにDockerfileの中身を以下のように書いて
FROM centos:latest RUN yum update -y RUN yum install -y httpd ADD http/index.html /var/www/html RUN chown -R apache:apache /var/www/html CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
docker build -t centos:httpd .
Sending build context to Docker daemon 5.632 kB Step 1 : FROM centos:latest ---> 67591570dd29 Step 2 : RUN yum update -y ---> Using cache ---> d4794a4c913c Step 3 : RUN yum install -y httpd ---> Using cache ---> 0fa8bf705b9c Step 4 : ADD http/index.html /var/www/html ---> Using cache ---> 58a0c8855775 Step 5 : RUN chown -R apache:apache /var/www/html ---> Using cache ---> 6dbb44e2bdb9 Step 6 : CMD /usr/sbin/httpd -D FOREGROUND ---> Using cache ---> e0e6867a47b7 Successfully built e0e6867a47b7
docker images |head REPOSITORY TAG IMAGE ID CREATED SIZE kenkenspin/centos latest 49e094b24ffb 11 minutes ago 294.7 MBa1fea63d0b4a 16 minutes ago 294.7 MB
タグ付けtag
docker tag [イメージID:タグ]or[イメージ名:タグ] 新しいリポジトリ[:タグ]
docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 60bf1a7ccfcb spin "/bin/bash" 3 days ago Up 3 days modest_tesla cee81536ebd5 centos "/bin/bash" 3 days ago Up 40 minutes compassionate_lumiere docker commit modest_tesla docker images |head REPOSITORY TAG IMAGE ID CREATED SIZEc632effdab58 52 seconds ago 561 MB kenkenspin/centos latest 328804cd7497 8 minutes ago 561 MB
docker tag c632effdab58 kenkenspin/centos:httpd
docker images REPOSITORY TAG IMAGE ID CREATED SIZE kenkenspin/centos httpd dff5d7864d9b 3 minutes ago 561 MB kenkenspin/centos latest dff5d7864d9b 3 minutes ago 561 MB49e094b24ffb 41 minutes ago 294.7 MB
レジストリ関連の操作
自分用Docker hubアカウントでDocker hubアカウントを作ります。
Dockerレジストリにログインlogin
docker login
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username (kenkenspin): Password: Login Succeeded
Login Succeededと表示されればLogin成功です。
リポジトリにイメージをアップpush
login出来たらレジストリにイメージを送信します。Docker Hubに送信するには[ユーザー名/リポジトリ]を指定します。送信前にtagコマンドでタグを付けておきます。
docker push kenkenspin/centos
docker commit compassionate_lumiere docker tag 328804cd7497 kenkenspin/centos docker push kenkenspin/centos
The push refers to a repository [docker.io/kenkenspin/centos] 3916b2a3c258: Pushed b92a341178ed: Pushed 1fb9c8d9774f: Pushed a858666d4841: Pushed 34e7b85d83e4: Mounted from library/centos httpd: digest: sha256:0424d54b27acbd1b4af818808c46211ed414abd22879002b7a78b22c2bd94d22 size: 1367 7fbc50ba74a8: Pushed 34e7b85d83e4: Layer already exists latest: digest: sha256:b5ee1500a6a947ba5f8dec1083a71863584abcfdf0d6e722fe2450f207382b9d size: 741
Docker hub上のイメージを検索search
docker search [検索語]
docker search wordpress INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED docker.io docker.io/wordpress The WordPress rich content management syst... 1517 [OK] docker.io docker.io/appcontainers/wordpress Centos/Debian Based Customizable Wordpress... 33 [OK] docker.io docker.io/bitnami/wordpress Bitnami Docker Image for WordPress 28 [OK] docker.io docker.io/kaihofstetter/wordpress-cli Installs a configured and ready to use Wor... 13 [OK] docker.io docker.io/centurylink/wordpress Wordpress image with MySQL removed. 12 [OK] docker.io docker.io/trafex/wordpress Wordpress container with Nginx 1.10 & PHP-... 5 [OK] docker.io docker.io/maximiliend/wordpress A enhanced docker image of WordPress with ... 4 [OK] docker.io docker.io/devgeniem/wordpress-server Minimal wordpress server with nginx and ph... 2 [OK] docker.io docker.io/dsifford/wordpress A WordPress docker environment that just w... 2 [OK] docker.io docker.io/scjalliance/wordpress WordPress with GD and FreeType 2 [OK] docker.io docker.io/bakudankun/wordpress-ja WordPress Japanese Edition forked from off... 1 [OK] docker.io docker.io/ddaishin/wordpress Wordpress日本語最新版 Xdebug OSX... 1 [OK] docker.io docker.io/dsteinkopf/wordpress wordpress clone plus some php extensions 1 [OK] docker.io docker.io/appeine/wordpress Container holding WordPress sources 0 [OK] docker.io docker.io/deardooley/wordpress Production-ready minimal Wordpress images. 0 [OK] docker.io docker.io/derjudge/wordpress 1:1 clone of docker-library/wordpress with... 0 [OK] docker.io docker.io/ikoptiev/wordpress Official Wordpress image with max file upl... 0
Docker Hubからログアウトlogout
docker logout
システム管理用コマンド
バージョン表示version
Dockerクライアントとサーバーのバージョンを表示します。
docker version Client: Version: 1.12.6 API version: 1.24 Package version: docker-common-1.12.6-5.git037a2f5.fc25.x86_64 Go version: go1.7.4 Git commit: 037a2f5/1.12.6 Built: Wed Jan 18 12:11:29 2017 OS/Arch: linux/amd64 Server: Version: 1.12.6 API version: 1.24 Package version: docker-common-1.12.6-5.git037a2f5.fc25.x86_64 Go version: go1.7.4 Git commit: 037a2f5/1.12.6 Built: Wed Jan 18 12:11:29 2017 OS/Arch: linux/amd64
Dockerサーバー情報info
docker info
Containers: 7 Running: 3 Paused: 0 Stopped: 4 Images: 37 Server Version: 1.12.6 Storage Driver: devicemapper Pool Name: docker-8:4-394314-pool Pool Blocksize: 65.54 kB Base Device Size: 10.74 GB Backing Filesystem: xfs Data file: /dev/loop0 Metadata file: /dev/loop1 Data Space Used: 3.719 GB Data Space Total: 107.4 GB Data Space Available: 103.7 GB Metadata Space Used: 8.184 MB Metadata Space Total: 2.147 GB Metadata Space Available: 2.139 GB Thin Pool Minimum Free Space: 10.74 GB Udev Sync Supported: true Deferred Removal Enabled: false Deferred Deletion Enabled: false Deferred Deleted Device Count: 0 Data loop file: /home/kenken/docker/var/lib/devicemapper/devicemapper/data WARNING: Usage of loopback devices is strongly discouraged for production use. Use `--storage-opt dm.thinpooldev` to specify a custom block storage device. Metadata loop file: /home/kenken/docker/var/lib/devicemapper/devicemapper/metadata Library Version: 1.02.136 (2016-11-05) Logging Driver: journald Cgroup Driver: systemd Plugins: Volume: local Network: bridge null host overlay Swarm: inactive Runtimes: oci runc Default Runtime: oci Security Options: seccomp selinux Kernel Version: 4.9.4-201.fc25.x86_64 Operating System: Fedora 25 (Workstation Edition) OSType: linux Architecture: x86_64 Number of Docker Hooks: 2 CPUs: 4 Total Memory: 7.55 GiB Name: z9lus.fedora ID: TAV5:A55D:J376:S5G7:CZ33:SAM2:RPLG:JFYX:JFLZ:JT2O:WUJF:V7JX Docker Root Dir: /home/kenken/docker/var/lib Debug Mode (client): false Debug Mode (server): false Username: kenkenspin Registry: https://index.docker.io/v1/ Insecure Registries: 127.0.0.0/8 Registries: docker.io (secure)
参考文献
Software Design 2017年2月号 今始めるDocker
Qiita各サイト。
コメント