Open16

Dockerについてのメモ

RyutaroMRyutaroM

Dockerfileやdocker-compose.yamlでよく分からないコードをコピペしたりするだけで、中身が理解できていない。

RyutaroMRyutaroM

https://qiita.com/aminosan000/items/ef8778cbd880aa6e655c

https://qiita.com/k5n/items/2212b87feac5ebc33ecb#利用の流れ

imagesについて

docker pull python

docker pull nginx
など

作ったimagesは

docker images

で確認する

containersについて
imageを使ってprojectsを作る的な。

docker run -itd -p 8000:80 --name fastapi-sample python

ローカルPCのポート番号が8000番、docker内のポート番号が80番って意味

作ったcontainersは

docker ps

で確認

docker ps -a

で停止しているすべてのコンテナを確認できる

docker内でbashを起動する

docker exec -it fastapi-sample bash

image.png
こんな感じで入れる

docker内でディレクトリ作成

mkdir ./usr/src/fastapi-sample

Ctrl+Dでローカルに戻る。

コピーするためのファイルをローカルで作成する

.

from fastapi import FastAPI
import uvicorn

app = FastAPI()

@app.get("/")
def main():
    return {"message": "Hello World"}

if __name__ == "__main__":
    uvicorn.run(app, port=80)

ローカルPCからdocker内へファイルをコピー

docker cp . fastapi-sample:./usr/src/fastapi-sample

再びdocker内でbashを起動する

docker exec -it fastapi-sample bash

pythonを起動する

python ./usr/src/fastapi-sample/main.py

image.png

localhost:8000にアクセス

image.png

こんなエラーがでた。

https://qiita.com/amuyikam/items/01a8c16e3ddbcc734a46

RyutaroMRyutaroM

dockerコンテナ内のlocalhostとローカルのlocalhostが違うからこのエラーが出たっぽい

RyutaroMRyutaroM

docker内のIPアドレスを0.0.0.0、ポート番号を80番
ローカルの8000番をdocker接続用に使って、8000:80として、
localhost:8000にアクセスしたら成功した。

追記: docker内の受け付けipアドレスを0.0.0.0にしたから動作したのかも。127.0.0.1だと、dockerコンテナ内からしかアクセスできない気がする。

RyutaroMRyutaroM

memo
Linuxはパス区切りが/じゃないといけないっぽい

以下docker-composeやdockerfileについて

RyutaroMRyutaroM

手動でコンテナを使う

コンテナの確認
docker ps -a

コンテナの起動
docker start <コンテナの名前かID>

コンテナに入る
docker exec -it <コンテナの名前かID> bash

RyutaroMRyutaroM

docker-compose.yamlを実行する。

イメージをビルドする

docker-compose build
多分Dockerfileを変更した時に使う。

docker-compose build --no-cache
でキャッシュを使わずにビルドする

イメージからコンテナを作成する

docker-compose up
作成したイメージを読み込んでコンテナを作成し、起動する

バックグラウンドで起動することもできる
docker-compose up -d

コンテナが起動しているか確認

docker ps

コンテナを終了

docker stop <コンテナの名前かID>

RyutaroMRyutaroM

docker-compose.yamlを書く

自動でコンテナの再起動を行なってくれるようにする

restart: always

https://docs.docker.jp/v19.03/config/container/start-containers-automatically.html

コンテナが無事に起動した時に実行するコマンド

commnad: <コマンド>
以下のように書くとNo such fileのエラーが出る。

command:
  - python manage.py migrate
  - python manage.py runserver 0.0.0.0:8000

以下のようにすると複数行書けるらしい。
command: bash -c "python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
もしくはこう。

command: >
  bash -c "python manage.py migrate &&
  python manage.py runserver 0.0.0.0:8000"

https://sleepless-se.net/2018/06/02/dockercomposecommandを複数行実行する方法/

RyutaroMRyutaroM
app-container  | django.db.utils.OperationalError: could not connect to server: Connection refused
app-container  |        Is the server running on host "localhost" (127.0.0.1) and accepting
app-container  |        TCP/IP connections on port 5432?
app-container  | could not connect to server: Cannot assign requested address
app-container  |        Is the server running on host "localhost" (::1) and accepting
app-container  |        TCP/IP connections on port 5432?
app-container  |

https://zenn.dev/ryo_t/articles/3be7a5ca39d496