Docker入門したばかりです、忘れないようにメモしていきます。
EC2でdocker、docker-composeをインストールしていきます。
// docker
sudo yum update -y
sudo yum install -y docker
sudo service docker start
sudo usermod -a -G docker ec2-user
// docker compose
sudo curl -L "https://github.com/docker/compose/rel... -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
Image
コンテナの基になるやつ dockerコンテナを立ち上げる基になるのがdocker imageです。
// docker centos検索
docker search centos
// イメージ一覧
docker image ls
// Image IDでimage削除
sudo docker rmi [Image ID]
注意: imageのcontainerはランチ中なら、先にcontainerを削除することが必要です。
// プルimage
docker pull centos:7
Container
imageから仮環境を設定します
// imageからcontainerを行う
docker run --privileged -d -p 80:80 [Image Name] /sbin/init
例:docker run --privileged -d -p 80:80 centos:7 /sbin/init
// container ID チェック
docker ps
// containerに入り
docker exec -it [Container ID] /bin/bash
// Apacheインストール
yum -y install httpd
systemctl status httpd
systemctl start httpd
systemctl enable httpd
echo "Hello World" > /var/www/html/index.html
// containerをexit
exit
Docker Hub
docker hubというdockerの公式サイトからpull(ダウンロード)してくることもできるし、自分で作ることもできます。
// 他のデバイスのimage 作成
docker commit -m "Comment" -a "筆者" [Container ID] [Image Name]
例:docker commit -m "Centos Project01" -a "Nguyen A" d452f1a1b69d project01:v1
// docker/hubにログイン
docker login
// docker hubにプッシュ
docker tag [local image] [origin image]
例:docker tag test/project01:v1 origin/test:v1
docker push [image名]
例:docker push origin/test:v1
// container動くチェック
sudo docker ps -a
// container状態
docker container ls -a
// containner削除
sudo docker rm [Container ID]
// container中止
docker container stop [Container ID]
// 再起動
docker container restart [Container ID]
// container一旦動きを止める
docker container pause [Container ID]
// container動くに入れる
docker container attach [Container ID]
// 全container中止
docker stop $(docker ps -a -q)
// 全container削除
docker rm $(docker ps -a -q)
// 全image削除
docker rmi -f $(docker images -a -q)
Dockerfile
Imageを作成するために、一覧操作をまとめるのはDocker fileです。
# イメージベース
FROM centos:7
# Author
MAINTAINER "test"
# Apache設定
RUN yum update -y
RUN yum install -y sudo
RUN yum install -y epel-release
RUN yum install -y http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
RUN yum clean all
RUN yum -y install wget
RUN yum -y install httpd
RUN yum -y install --enablerepo=remi,remi-php71 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt php-pgsql
# Dir設定
WORKDIR /var/www/html
#localから仮定に移動
ADD ./code /var/www/html
# start httpd
CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]
# 80 443 など
EXPOSE 80
2. Build image
docker build -t httpd_sample .
3. containerを作成、実行
docker run -d -p 80:80 httpd_sample
Docker Compose
複数のコンテナから成るサービスを構築・実行する手順を自動的にし、管理を容易にする機能です。
# docker file
FROM centos:7
RUN yum -y update
RUN yum -y install httpd php
WORKDIR /var/www/html
ADD ./code /var/www/html
EXPOSE 80
# docker compose yml
version: '3'
services:
web:
build: .
command: ["/usr/sbin/httpd", "-D", "FOREGROUND"]
volumes:
- ./code:/var/www/html
ports:
- "80:80"
# build image
docker-compose build
# run
docker-compose up
docker-compose up -d (background制度)
# stop
docker-compose stop
# start
docker-compose start
# stop and delete container
docker-compose down
Docker Volume, Networks
Volume
目的はcontainerを削除するとき、データを削除しないように作成します。
# docker volume create 作成
# docker volume inspect 詳細
# docker volume ls 一覧
# docker volume rm 削除
# docker volume prune 全部削除
例1
docker volume create project01_code
docker run --name project01 -p 8081:80 -v project01_code:/usr/local/apache2/htdocs -d httpd
例2
docker container run --name mysql -e MYSQL_ROOT_PASSWORD=pass -p 3306:3306 -d mysql:5.7
docker volume create pj01_data
docker container run --name mysql -v pj01_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass -p 3306:3306 -d mysql:5.7
Networks
同じネットワーク場合は複数containerを接続できます。
# docker network create 作成
# docker network inspect 詳細
# docker network ls 一覧
# docker network rm 削除
# docker network prune 要らないネットワーク削除
# docker network connect 接続作成
# docker network disconnect 接続中止
例1
docker network create --subnet 192.168.1.0/24 network1
# 作成したネットワークに設定し、接続します
docker run -itd --name=container1 --network network1 busybox
docker run -itd --name=container2 --network network1 busybox
#接続チェック
docker attach container1
ping [container2 ip]
例2
# docker run --name mysql --network network1 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:5.7
# docker run --name wordpress --network network1 -e WORDPRESS_DB_PASSWORD=my-secret-pw -p 8080:80 -d wordpress
よく使うコマンド
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
docker rmi -f $(docker images -a -q)
ご覧いただき、有難うございました。
勘違いところがあれば、気軽にコメントをしてください。