0
0

More than 1 year has passed since last update.

Docker備忘録

Posted at

dockerの勉強のための備忘録
dockerのイメージ作成からbuidあたりまで
勉強の進捗に従って更新予定

Dockerイメージの作成

## docker run コマンドでイメージをHubからダウンロードする

docker run docker/whalesay cowsay Hello!!

ローカルにダウンロードされていない場合は、イメージのpull結果が表示される

docker run docker/whalesay cowsay Hellodocker run hello-world:latest
Unable to find image 'docker/whalesay:latest' locally
latest: Pulling from docker/whalesay
Image docker.io/docker/whalesay:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
e190868d63f8: Pull complete 
909cd34c6fd7: Pull complete 
0b9bfabab7c1: Pull complete 
a3ed95caeb02: Pull complete 
00bf65475aba: Pull complete 
c57b6bcc83e3: Pull complete 
8978f6879e2f: Pull complete 
8eed3712d2cf: Pull complete 
Digest: sha256:178598e51a26abbc958b8a2e48825c90bc22e641de3d31e18aaf55f3258ba93b
Status: Downloaded newer image for docker/whalesay:latest
 ____________________________________ 
< Hellodocker run hello-world:latest >
 ------------------------------------ 
    \
     \
      \     
                    ##        .            
              ## ## ##       ==            
           ## ## ## ##      ===            
       /""""""""""""""""___/ ===        
  ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~   
       \______ o          __/            
        \    \        __/             
          \____\______/   

ローカル上にダウンロード済みのイメージ一覧を表示する

docker images

~/docker 14s
❯ docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
hello-world       latest    feb5d9fea6a5   7 months ago   13.3kB
docker/whalesay   latest    6b362a9f73eb   6 years ago    247MB

tagコマンドでイメージにタグ付けすることができる
/で区切って任意の名前をつける

docker tag docker/whalesay my_whalesay

dockerイメージの削除

コンテナを削除してからイメージを削除or -fコマンド

docker rmi docker/whalesay

イメージをPULLする

docker pull docker/whalesay(PULLしたいイメージ名)

既にイメージがある場合はAlready existsとなる

❯ docker pull docker/whalesay
Using default tag: latest
latest: Pulling from docker/whalesay
Image docker.io/docker/whalesay:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
e190868d63f8: Already exists
909cd34c6fd7: Already exists
0b9bfabab7c1: Already exists
a3ed95caeb02: Already exists
00bf65475aba: Already exists
c57b6bcc83e3: Already exists
8978f6879e2f: Already exists
8eed3712d2cf: Already exists
Digest: sha256:178598e51a26abbc958b8a2e48825c90bc22e641de3d31e18aaf55f3258ba93b
Status: Downloaded newer image for docker/whalesay:latest
docker.io/docker/whalesay:latest

Dockerfileについて

Dockerイメージ作成のための指示書
Dockerfileを作成する

touch Dockerdile

ファイルを開いて指示コマンドを記述する

FROM docker/whalesay:latest // どのイメージを使うか
RUN apt-get -y update && apt-get install -y fortunes // -yは処理が止まらないようにする
CMD /usr/games/fortune | cowsay // run時に実行されるコマンド

dockerfileからイメージをビルドする

-t : タグ名の指定

docker build -t docker-whale(タグ名)

実行結果

❯ docker build -t docker/whalesay .
[+] Building 25.0s (6/6) FINISHED
 => [internal] load build definition from Dockerfile                       0.0s
 => => transferring dockerfile: 158B                                       0.0s
 => [internal] load .dockerignore                                          0.0s
 => => transferring context: 2B                                            0.0s
 => [internal] load metadata for docker.io/docker/whalesay:latest          0.0s
 => [1/2] FROM docker.io/docker/whalesay:latest                            0.2s
 => [2/2] RUN apt-get -y update && apt-get install -y fortunes            24.5s
 => exporting to image                                                     0.2s
 => => exporting layers                                                    0.2s
 => => writing image sha256:56e423c8ab3edc2903d97e04f6215b9eb43e54fdd8822  0.0s
 => => naming to docker.io/docker/whalesay                                 0.0s

Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them

ビルドしたイメージを実行する

docker run docker/whalesay

nginxイメージをpull

docker pull nginx

pullしたイメージを起動する

docker run --name test-nginx(tag名) -d -p 8080:80 nginx(コンテナ名)

ローカルホスト8080番にアクセスすると、nginxのwelcome画面が表示される
image.png

docker psコマンドで、現在稼働中のコンテナを確認できる

❯ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED              STATUS              PORTS                                   NAMES
e955fcb1d476   nginx     "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:8080->80/tcp, :::8080->80/tcp   test-nginx

run中のコンテナは削除できない

実行中のコンテナは削除できないので、一旦stopさせる

docker stop test-nginx
❯ docker stop test-nginx
test-nginx

次にコンテナを削除する

docker rm test-nginx

特に表示されないが、docker psすると先ほどのコンテナが削除されていることを確認できる

❯ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
(ここに何も表示されていなければok)

nginxの設定

ホストマシン上のディレクトリをマウントする
ホストマシン(自分のpc上のディレクトリ)にあるファイルをdockerコンテナで立てたnginxに公開する

任意のディレクトリを作成し、その中にhtmlを記述する

❯ ls
Dockerfile html

❯ cat ./html/index.html
<!DOCTYPE html>
<html>
<body>

<h1>My Test Head</h1>
<p>My Test documentations</p>

</body>
</html>

今回は上記ファイルをnginxを使ってブラウザで確認する
-v <ホスト側のディレクトリ>:<コンテナ側のマウントポイント>:<オプション>
-p <ホスト側のポート番号>:<コンテナ側のポート番号>\
<イメージ名>

❯ docker run --name first-nginx -v /Users/docker/html:/usr/share/nginx/html:ro -d -p 8080:80 nginx

実行結果としてコンテナのIDが表示される

5525a00da1eaa67b563fe981d91e80a257a12b39d02866d65e8c715b44f998d2

ブラウザでhtp://localhost:8080
image.png

dockerコンテナが停止した際にコンテナを削除する

オプション--rmをつける

docker run --name tmp-nginx --rm -d nginx

dockerコンテナ内とファイルをやりとりする

docker cp <ローカルのパス>:<tmp-nginx:(パス)>:ローカルからコンテナへファイルやディレクトリをコピー
docker cp <tmp-nginx:(パス)> <ローカルのパス>:コンテナからローカルへファイルやディレクトリをコピー

ローカルで現在のディレクトリ(./)にコンテナ内のconfigファイルを転送する

docker cp tmp-nginx:etc/nginx/conf.d/default.conf ./

ローカルにファイルが転送されていることを確認

❯ ls
Dockerfile   default.conf

###ローカル上でファイルを書き換え、それをbuild時にコンテナ内に転送する

server {
    listen       80 -> 8080に変更;
    listen  [::]:80;
    server_name  localhost;
(以下、略)

コンテナ側のポート番号を変更してみる
Dockerfileを作成し、ファイル転送の記述を追加する

FROM nginx:latest
COPY default.conf /etc/nginx/conf.d/default.conf
(Dockerfileと同じ階層にいるdefault.confをコンテナ内にコピー) 

コンテナを立ち上げる
今回はコンテナ側のポート番号も8080にする(80番だとアクセスできない)

docker run --name web -p 8080:8080 --rm nginx:ver1

ブラウザ上で表示されればok
image.png

コンテナのライフサイクルについて

CREATED: コンテナが立ち上がっているがRunnnungしていない状態

docker create --name status-test -it alpine /bin/bash

-i シェルを展開し双方向に接続できる
-tコンテナ内にTTYを割り当てる

状態を確認してみる

❯ docker inspect status-test
[
    {
        "Id": "1f1e7bd14ed3a6404672309cc69113d84ed5e5c342f7c7c6b510f5eda3e78fa0",
        "Created": "2022-04-24T04:35:05.8179181Z",
        "Path": "/bin/sh",
        "Args": [],
        "State": {
            "Status": "created",  // コンテナが作成されている
            "Running": false,     // 実行状態ではない

この状態だとdocke psをしても何も表示されない

❯ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

Running: コンテナが起動している状態

では次にコンテナを起動する

❯ docker start status-test
status-test

❯ docker ps
CONTAINER ID   IMAGE     COMMAND     CREATED         STATUS         PORTS     NAMES
1f1e7bd14ed3   alpine    "/bin/sh"   3 minutes ago   Up 3 seconds             status-test

今度はコンテナの情報が表示された
詳細な状態も確認してみる

❯ docker inspect status-test
[
    {
        "Id": "1f1e7bd14ed3a6404672309cc69113d84ed5e5c342f7c7c6b510f5eda3e78fa0",
        "Created": "2022-04-24T04:35:05.8179181Z",
        "Path": "/bin/sh",
        "Args": [],
        "State": {
            "Status": "running",  //createdからrunningに変わっている
            "Running": true,      // falseからtrueに変わっている

Paused: コンテナは起動しているが、一時的に応答拒否状態

❯ docker ps
CONTAINER ID   IMAGE     COMMAND     CREATED         STATUS                  PORTS     NAMES
1f1e7bd14ed3   alpine    "/bin/sh"   6 minutes ago   Up 2 minutes (Paused)             status-test
(起動中なので表示される)

❯ docker inspect status-test
[
    {
        "Id": "1f1e7bd14ed3a6404672309cc69113d84ed5e5c342f7c7c6b510f5eda3e78fa0",
        "Created": "2022-04-24T04:35:05.8179181Z",
        "Path": "/bin/sh",
        "Args": [],
        "State": {
            "Status": "paused", // pausedに変わっている
            "Running": true,    // Runnningのまま
            "Paused": true,     // Paused: trueに変わっている

pause状態はunpauseコマンドでrunnning状態に戻すことができる

❯ docker unpause status-test
status-test

❯ docker inspect status-test
[
    {
        "Id": "1f1e7bd14ed3a6404672309cc69113d84ed5e5c342f7c7c6b510f5eda3e78fa0",
        "Created": "2022-04-24T04:35:05.8179181Z",
        "Path": "/bin/sh",
        "Args": [],
        "State": {
            "Status": "running",   // runningに変わっている
            "Running": true,
            "Paused": false,       // falseに変わっている

Exited: コンテナは停止しているが残っている状態

停止しているコンテナを確認する

docker ps -a

ここに存在しているコンテナはdocker startコマンドで再起動できる
削除する場合はdocker rmコマンド

image.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0