#
ドキュメント

Document

自分のための備忘録です。

Docker 基礎

コンテナ作成方法

  • DockerfileからDockerコンテナ作成
  • Docker HubからDockerコンテナ作成

DockerfileからDockerコンテナ作成

  1. .Dockerfileを作成
  2. build: DockerfileからDockerイメージ作成
  3. run/create: DockerイメージからDockerコンテナ作成

    docker create コマンドは、コンテナを停止状態 (stop した状態) で作成する以外は、run コマンドと同等です。オプションは run コマンドを参照してください。

    https://www.tohoho-web.com/docker/docker_run.html

  4. start:createでコンテナを作成した場合に起動

1. Dockerfileを作成

例) 最新のUbuntuApacheを動かすDockerfile

# ubuntu
FROM ubuntu:latest

RUN apt-get -y update && apt-get -y upgrade
RUN apt-get -y install apache2

EXPOSE 80

COPY index.html /var/www/html


ENV APACHE_RUN_USER www-data
ENV APACHE_RUN_GROUP www-data
ENV APACHE_PID_FILE /var/run/apache2.pid
ENV APACHE_RUN_DIR /var/run/apache2
ENV APACHE_LOG_DIR /var/log/apache2
ENV APACHE_LOCK_DIR /var/lock/apache2


CMD ["apachectl", "-D", "FOREGROUND"]

2. build(イメージ作成)

$ docker image build -t {{image_name}} .
  • DockerfileからDockerイメージを作成する
  • コマンド末尾の.Dockerfileの場所(例はカレントディレクト)を指す
  • -tでイメージに名前を指定可能(指定が推奨)
  • -t{{name:tag}}tagを指定する
  • ↑でtagしない場合はlatestになる

3. run(イメージからコンテナ作成・・・起動した状態)

$ docker run --name {{container_name}} -p 8000:80 -v path/to/host:path/to/docker {{image_name}}

例
$ docker run -d --name my-httpd -p 8000:80 -v $(pwd):/usr/local/apache2/htdocs/ httpd:latest

runとcreateの違い

FROM php:7.4.6

COPY ./test.sh /usr/local/bin

RUN chmod +x /usr/local/bin/test.sh
#! /bin/bash

echo 'hello'

php:customというイメージを作成済みと仮定する。

$ docker run php:custom /usr/local/bin/test.sh
// hello

createはコンテナを停止した状態で作成するので以下はエラー

$ docker create php:custom /usr/local/bin/test.sh

createの場合は、コンテナを起動するには、createしたあとにstartする必要がある。

2. Docker HubからDockerコンテナ作成

Docker Hubでホストされているイメージ -> コンテナ作成。

$ docker run -d -p 8080:80 --name my-app -v $(pwd):/var/www/html php:7.4-apache

-d, --detach コンテナをバックグラウンドで実行し、コンテナ ID を表示

http://docs.docker.jp/engine/reference/commandline/run.html

-dを忘れてもctrl + p, ctrl + qでデタッチ可能

$ docker runで、Docker Hubのイメージを指定(例:php:7.4-apache)してコンテナを作成する処理は、内部で以下コマンドを実行している。

  1. docker pull:イメージをDocker Hubから取得
  2. docker create:イメージからコンテナを作成
  3. docker start:コンテナを起動

コンテナにログイン(docker exec -it)

http://docs.docker.jp/engine/reference/commandline/exec.html

$ docker exec -it {{container_name}} /bin/bash

docker execのオプションは以下のとおり。

-d, --detach=false デタッチド・モード: コマンドをバックグラウンドで実行
--detach-keys デタッチド・コンテナに特定のエスケープ・キー・シーケンスを設定
--help=false 使い方の表示
-i, --interactive=false アタッチしていなくても STDIN をオープンにし続ける
--privileged=false コマンドに拡張 Linux ケーパビリティの追加
-t, --tty=false 疑似ターミナル (pseudo-TTY) の割り当て
-u, --user= ユーザ名か UID (書式: <名前|uid>[:<グループ|gid>])

http://docs.docker.jp/engine/reference/commandline/exec.html

※ tty:teletypewriter

inspect {{image ID}}

docker inspectCMDEntrypointを調べることができる。

sh $ docker inspect {{image ID}}

Appendix

Official Image

通常親イメージとして使用される

  • https://github.com/docker-library

Docker for Macのディスク使用