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