Dockerについてのメモ

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

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
こんな感じで入れる
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
localhost:8000
にアクセス
こんなエラーがでた。

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

docker内のIPアドレスを0.0.0.0、ポート番号を80番
ローカルの8000番をdocker接続用に使って、8000:80として、
localhost:8000にアクセスしたら成功した。
追記: docker内の受け付けipアドレスを0.0.0.0にしたから動作したのかも。127.0.0.1だと、dockerコンテナ内からしかアクセスできない気がする。

memo
Linuxはパス区切りが/
じゃないといけないっぽい
以下docker-composeやdockerfileについて

リファレンス

実行方法

Dockerfile内の各コマンドの説明

手動でコンテナを使う
コンテナの確認
docker ps -a
コンテナの起動
docker start <コンテナの名前かID>
コンテナに入る
docker exec -it <コンテナの名前かID> bash

docker-compose.yamlを実行する。
イメージをビルドする
docker-compose build
多分Dockerfileを変更した時に使う。
docker-compose build --no-cache
でキャッシュを使わずにビルドする
イメージからコンテナを作成する
docker-compose up
作成したイメージを読み込んでコンテナを作成し、起動する
バックグラウンドで起動することもできる
docker-compose up -d
コンテナが起動しているか確認
docker ps
コンテナを終了
docker stop <コンテナの名前かID>

dokcer-compose.yamlのnetworksについて

dockerのvolumeについて
コンテナを破棄した時にもデータが消えないようにするために、ボリュームってのを使う。
ボリュームを使えばコンテナの外にデータを置いておけるイメージか?

.envファイルとdocker-compose
docker-composeと、Dockerfileを使って新たにdockerイメージをビルドしたいときに、docker-composeからDockerfileへと値を渡すことができる。

docker-compose.yamlを書く
自動でコンテナの再起動を行なってくれるようにする
restart: always
コンテナが無事に起動した時に実行するコマンド
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"

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 |