Docker CLI
DockerHub連携
docker login
docker logout
Docker Help使用
docker help
docker image --help
Docker Image
# 一覧
docker images
docker image ls
# Image取得
docker pull repoName/ImageName:[TagName]
# Imageプッシュ
docker push repoName/ImageName:[TagName]
# Image詳細
docker inspect ImageName
# Imageタグ付け
docker tag ImageName:[TagName] repoName/ImageName:[TagName]
# Image削除
docker rmi ImageName
docker image prune -a
Docker Container
# コンテナ起動
docker run \
-d \ # ディスパッチモード
-p <HostPort>:<ContainerPort> \ # パブリック設定ポート番号
-v <ContainerPath> \ # AnonymousVolume設定
-v <NamedVolume>:<ContainerPath> \ # Named Volume設定
-v <HostPath>[$(pwd)]:<ContainerPath>[:ro] \ # Bind Mount設定
--name ContainerName \ # コンテナ名指定
--rm \ # 終了後削除設定
--env PORT=3000 \ # 環境変数指定
--env-file .env \ # 環境変数ファイル指定
--network name \ # ネットワーク指定
ImageName:[TagName] # イメージ指定
# コンテナ一覧確認
docker ps -a
# コンテナへのログイン
docker exec -it ContainerName bash
# ファイルコピー
docker cp <HostFiles> ContainerName:<ContainerPath>
docker cp ContainerName:<ContainerPath> <HostFiles>
# コンテナからDockerイメージ作成
docker commit ContainerName repoName/ImageName:[TagName]
# コンテナ起動、停止
docker start [-a] ContainerName
docker stop ContainerName
# ログ確認
docker logs [-f] ContainerName
# アタッチモード
docker attach ContainerName
# コンテナ削除
docker rm (-f) ContainerName
docker container prune
Docker Network
docker network ls
docker network create --subnet=172.19.0.0/16 mynet
docker network rm xx
Docker Volume
docker volume ls
docker volume create xx
docker volume rm xx
実例
docker run --name php74 -d -p 80 -v "C:\Acquia\docker\static":/var/www/html php:7.4-apache
docker run --name php56 -d -p 80 -v "C:\Acquia\docker\static":/var/www/html php:5.6-apache
docker run --name my-nginx -v "C:\Acquia\docker\static":/usr/share/nginx/html -d -p 80 nginx
docker tag ...
docker push
ほかの人docker pull
docker run -v "C:\Acquia\docker\mysql":/var/lib/mysql --name my-mysql -e MYSQL_ROOT_PASSWORD=aquaring -d --net=mynet --ip=172.19.0.33 mysql
docker run --name my-drupal --net mynet -p 80 -d drupal
Dockerfile
FROM php:7.4-fpm
WORKDIR /var/www
COPY php.ini /usr/local/etc/php/
ARG DEFAULT_PORT=80
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer
RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim
RUN apt-get update \
&& docker-php-ext-install pdo_mysql
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin
ENV PORT=${DEFAULT_PORT}
EXPOSE ${PORT}
RUN composer global require "laravel/installer"
CLI
docker build \
--build-arg PORT=80
-t repoName/ImageName:[TagName] \
.
.dockerignoreファイル(ビルド時に除外設定)
Dockerfile
node_modules
.env
.git
.gitignore
.dockerignore
Docker Compose
- compose使用するのは否定的だったが、docker runで実行した内容をドキュメント化する意味では単一コンテナでもcompose使用推奨
version: "3.8"
services:
mongodb:
image: 'mongo'
volumes:
- data:/data/db
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: password
backend:
build: ./backend
ports:
- '80:80'
volumes:
- logs:/app/logs
- ./backend:/app
- /app/node_modules
env_file:
- ./env/backend.env
depends_on:
- mongodb
frontend:
build: ./frontend
ports:
- '3000:3000'
volumes:
- ./frontend/src:/app/src
stdin_open: true
tty: true
depends_on:
- backend
volumes:
data:
logs:
CLI
docker-compose build
docker-compose up -d [--build]
docker-compose down
docker-compose run --rm npm init