基本操作

# 验证是否安装成功
docker info

# 查看docker版本
docker --version

# 查看do

# 启动docker服务
sudo service docker start/sudo systemctl start docker

# List containers
docker ps

# 列出最近一次启动的容器
docker ps -l

# 检索镜像
docker search image_name

# 显示镜像历史
docker history image_name

# 普通用户授权docker
sudo usermod -aG docker user
sudo service docker restart

images文件管理

# 列出本机的所有 image 文件。
docker image ls

# 删除 image 文件
docker image rm [imageName]

# image 文件从仓库抓取到本地
docker image pull library/hello-world

# docker 中国官方源加速
docker pull registry.docker-cn.com/library/ubuntu:16.04

# 修改docker镜像存储位置
# 停止docker服务
systemctl stop docker
# 修改/lib/systemd/system/docker.service
# FROM:
ExecStart=/usr/bin/docker daemon -H fd://
# TO:
ExecStart=/usr/bin/docker daemon -g /new/path/docker -H fd://
# reload systemd daemon
systemctl daemon-reload
# start docker daemon
systemctl start docker
# 使用docker info查看root位置
docker info

container 容器管理

# 运行 image 其中-i启动交互式,-t是分配一个tty
docker run -it --rm ubuntu bash

# 80端口映射 [-p hostPort:containerPort]
docker run -p 80:80 -t -i linode/lamp /bin/bash

docker container run \
# --rm停止运行后,自动删除容器文件
  --rm \
# --name容器的名字叫做wordpress
  --name wordpress \
# --volume将当前目录($PWD)映射到容器的/var/www/html(Apache 对外访问的默认目录)
  --volume "$PWD/":/var/www/html \
  php:5.6-apache

# -d 以Daemonized模式运动(后台运行)
docker run --name webserver -d -p 4000:80 nginx

# 查看正在运行的容器
docker container ls -l

# 查看所有容器
docker container ls --all

# 终止容器
docker container kill [containID]

# 删除容器
docker rm [containerID]

# 启动已经存在的容器
docker container start [containerID]

# 终止容器运行
docker container stop [containerID]

# 查看docker容器的输出
docker logs [containerID]

# 进入一个正在运行的 docker 容器
docker exec -it [containerID] /bin/bash

# 从正在运行的 Docker 容器里面,将文件拷贝到本机
docker cp [containID]:[/path/to/file] ~/your/local/path

# 停用全部运行中的容器
docker stop $(docker ps -q)

# 删除全部容器
docker rm $(docker ps -aq)

# 查看容器的变化
docker diff [容器ID或容器名]

# 存储容器
docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
docker commit \
    --author "Joe Jiang <hijiangtao@gmail.com>" \
    --message "modify: Nginx default page to Hello Docker" \
    webserver \
    nginx:v2

Dockerfile

# Dockerfile

# 使用 Python 运行时作为基础镜像
FROM python:2.7-slim

# 设置 /app 为工作路径
WORKDIR /app

# 将当前目录所有内容复制到容器的 /app 目录下
ADD . /app

# 安装 requirements.txt 中指定的包
RUN pip install --trusted-host pypi.python.org -r requirements.txt

# 对容器外开放80端口
EXPOSE 80

# 定义环境变量
ENV NAME World

# 当容器启动时运行 app.py 
CMD ["python", "app.py"]

lamp docker

# create a temporary container for testing purposes
docker run -it --rm fauria/lamp bash
# create a container to debug a web app
docker run --rm -p 8080:80 -e LOG_STDOUT=true -e LOG_STDERR=true -e LOG_LEVEL=debug -v /my/data/directory:/var/www/html fauria/lamp

Laradock

docker-compose up -d nginx mysql phpmyadmin redis workspace 
# 关闭所有容器
docker-compose down
# 进入workspace
docker-compose exec workspace bash

# 重启nginx和mysql
docker-compose up -d nginx mysql

network

# 创建新的docker网络
docker network create -d bridge my-net

# 运行两个容器并连接到 my-net 网络, 进入任一个容器,两者可以互相ping通
docker run -it --rm --name busybox1 --network my-net busybox sh
docker run -it --rm --name busybox2 --network my-net busybox sh

# 列出所有docker网络
docker network ls

# 删除网络
docker network rm c520032c3d31

# Use the docker network prune command to remove all unused networks.
docker network prune

docker换源

# 新建/etc/docker/daemon.json加入
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}