技術系

[備忘録] dockerとdocker-compose

技術系

こんにちは、なかにしです。

今回は、dockerコマンド忘れがちな自分に、備忘録的に残します。

dockerfileのみ

流れは、dockerfile -> docker image -> docker container

引用: https://www.kagoya.jp/howto/cloud/container/dockerimage/

image作成

build で image 作成ができる。
▼ 起動時に「Hello!!」とだけ出力するImage

FROM alpine:latest

CMD [ "echo", "Hello!!" ]

dockerfileのある場所で、以下コマンドでImage作成

docker build .
// Imageに名前をつける場合は、-tを使用する。 
// ex) docker build -t hello-image .

▼ Imageが作成される

▼ imageの一覧を確認するコマンド

docker images

containerを作成

以下コマンドで、imageを基にしてbuildし、containerを作成する。

docker run <image名>
// docker run hello-image

containerが作成され、「Hello!!」もコンソールに出力された。
コンテナ名は自動で割り振られる。

▼ コンテナ名を指定したい場合

docker run --name <指定するコンテナ名>  hello-image

このコンテナを起動すると、毎回「Hello!!」が出力される。
▼ コンテナ起動コマンド

docker start <コンテナ名、コンテナID>
// docker start eager_sutherland

▼ 起動の度に、コンソールに出力結果が増えていく

docker-compose使用

docker-composeを使用すると、複数コンテナ起動 & コンテナ作成までを簡略化できる。

引用: https://www.kagoya.jp/howto/cloud/container/dockercompose/

Imageが作成済の場合

▼ yaml作成

version: '3'
services:
  app:
    image: hello-image
    ports:
      - "8080:80"

以下コマンドでコンテナ作成ができる

docker-compose up
// バックグラウンド作成は docker-compose up -d

コンテナが作成された
名前はデフォルトで割り振られる

「docker-practice」の部分は「プロジェクト名」と呼ばれ、デフォルトでカレントディレクトリの名前になる。

「app-1」の部分はコンテナ名で、で風呂とでservicesで指定した名前になる。

それぞれの名前を指定する場合は、以下

version: '3'
name: "sample-project" // プロジェクト名を指定
services:
  app:
    image: hello-image
    ports:
      - "8080:80"
    container_name: "Hello"  // コンテナ名を指定

▼ 名前が指定された状態でコンテナが作成された

名前指定は、複数プロジェクトが動いている状況だと重複のリスクがあるので、メリデメを考慮する必要がある。

Imageが未作成の場合

Image作成 + buildを一気に行う。

dockerfileを作成し、それを指定する。

▼ dockerfile

FROM alpine:latest

CMD [ "echo", "Hello!!" ]

▼ docker-compose.yml

version: '3'
services:
  app:
    build:
      dockerfile: ./dockerfile // dockerfileを指定
    ports:
      - "8080:80"

もろもろの名前をつける場合は以下

version: '3'
name: sample-project  // プロジェクト名
services:
  app:
    build:
      dockerfile: ./dockerfile
    ports:
      - "8080:80"
    container_name: bbb  // コンテナ名
タイトルとURLをコピーしました