官方文档:https://docs.docker.com/
中文社区:https://www.docker.org.cn/index.html
进入官方文档
打开侧边栏
Get Docker-> Docker Engine - Community或 Docker Enterprise-> 选择属于自己操作系统的教程进行安装
本地步骤(20190804)
更新包列表$ sudo apt-get update
安装包以允许通过HTTPS使用存储库$ sudo apt-get install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
添加官方 GPG 密钥$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
搜索指纹的最后 8 个字符验证密钥指纹$ sudo apt-key fingerprint 0EBFCD88
设置稳定版(stable)的存储库,另外还可以设置每日最新版本(nightly)或测试版本(test)$ sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
更新包列表$ sudo apt-get update
开始安装 Docker Engine$ sudo apt-get install -y docker-ce docker-ce-cli containerd.io
另外建议做一下添加用户至 docker 组和更改 docker 镜像源
需注意的步骤
添加GPG
密钥的时候使用国内GPG$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
向 sources.list中添加Docker软件源,参考
安装完成后添加当前用户进docker组,以后就不用每次输命令都用sudo
啦,参考
$ sudo add-apt-repository \
"deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) \
stable"
$ sudo groupadd docker
$ sudo usermod -aG docker $USER
# 注销,重新登录
$ init 5
这部分内容主要是为了加速镜像源的下载,否则直接下载下载速度可能会很低,毕竟docker服务器在国外。
国内的镜像源有
docker官方中国区:https://registry.docker-cn.com
网易:http://hub-mirror.c.163.com
ustc:http://docker.mirrors.ustc.edu.cn
阿里云:http://<你的ID>.mirror.aliyuncs.com
方法一(推荐)
修改 /etc/docker/daemon.json 文件
docker默认的源为国外官方源,下载速度较慢,可改为国内镜像加速下载镜像
华中科大官方文档:https://lug.ustc.edu.cn/wiki/mirrors/help/docker
Linux 编辑该文件:/etc/docker/daemon.json
Windows 编辑该文件:%programdata%\docker\config\daemon.json
# 推荐华中科大,网易的不稳定
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
ubuntu14.04 以下使用下面的方法
对于使用 upstart 的系统而言,编辑 /etc/default/docker 文件,在其中的 DOCKER_OPTS 中配置加速器地址:
DOCKER_OPTS="--registry-mirror=https://registry.docker-cn.com"
方法二
修改 /etc/default/docker 文件
$ sudo echo "DOCKER_OPTS=\"--registry-mirror=http://hub-mirror.c.163.com\"" >> /etc/default/docker
方法三
在下载的时候,指定镜像源
$ docker run hello-world --registry-mirror=https://docker.mirrors.ustc.edu.cn
方法四
systemctl 处设置启动参数
$ sudo systemctl edit docker.service
$ /etc/systemd/system/docker.service.d/override.conf
# 加入以下内容
[Service]
ExecStart=/usr/bin/docker -d -H fd:// --registry-mirror=https://docker.mirrors.ustc.edu.cn
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
官方脚本地址:https://github.com/docker/docker-install
官方安装:$ curl -sSL https://get.docker.com/ | sh
阿里云安装(20190801安装失败):$ curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
DaoCloud安装(20191024安装失败):$ curl -sSL https://get.daocloud.io/docker | sh
官方安装,指定阿里源安装(20200214安装失败):$ curl -fsSL https://get.docker.com -o get-docker.sh | sudo sh get-docker.sh --mirror Aliyun
# step 1: 安装必要的一些系统工具
$ sudo apt-get update
$ sudo apt-get -y install apt-transport-https ca-certificates $ curl software-properties-common
# step 2: 安装GPG证书
$ curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
# Step 3: 写入软件源信息
$ sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# Step 4: 更新并安装Docker-CE
$ sudo apt-get -y update
$ sudo apt-get -y install docker-ce
# 安装指定版本的Docker-CE:
# Step 1: 查找Docker-CE的版本:
# apt-cache madison docker-ce
# docker-ce | 17.03.1~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# docker-ce | 17.03.0~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
# Step 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.1~ce-0~ubuntu-xenial)
# sudo apt-get -y install docker-ce=[VERSION]
卸载软件包$ sudo apt-get purge docker-ce
主机上的镜像、容器、卷或自定义配置文件不会自动删除。要删除所有镜像,容器和卷使用该命令$ sudo rm -rf /var/lib/docker
summary
拉取容器$ docker pull <container-name>
运行容器$ docker run <container-name>
运行容器在停止后自动销毁$ docker run --rm <container-name>
后台运行容器并映射端口$ docker run -d -p <container-port1>:<host-port1> -p <container-port2>:<host-port2> <container-name>
后台运行容器并映射目录$ docker run -d -v <host-dir1>:<container-dir1> -v <host-dir2>:<container-dir2> <container-name>
测试容器连通性$ docker exec -it <source-container-name> ping <target-container-name>
容器错误排查$ docker logs <container-name>
查看已有网络$ docker network ls
杀死所有正在运行的容器$ docker kill $(docker ps -a -q)
删除所有已经停止的容器$ docker rm $(docker ps -a -q)
删除所有未打 dangling 标签的镜像$ docker rmi $(docker images -q -f dangling=true)
删除所有镜像$ docker rmi $(docker images -q)
进入容器$ docker exec -it <target-container-name> /bin/bash
查看容器进程$ docker top <target-container-name>
查看容器挂载的目录$ docker inspect <target-container-name> | grep Mounts -A 20
查看容器地址$ docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)
其它方法:$ docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
显示所有:$ docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
# ~/.bash_aliases
# 杀死所有正在运行的容器.
alias dockerkill='docker kill $(docker ps -a -q)'
# 删除所有已经停止的容器.
alias dockercleanc='docker rm $(docker ps -a -q)'
# 删除所有未打标签的镜像.
alias dockercleani='docker rmi $(docker images -q -f dangling=true)'
# 删除所有已经停止的容器和未打标签的镜像.
alias dockerclean='dockercleanc || true && dockercleani'
如果compose文件名字非默认的 docker-compose.yml或 docker-compose.yaml,需要在docker-compose
命令后面加上-f <compose-filename>
参数。
在命令后面可加上container-name
指定要操作的容器,如:docker-compose logs <container-name>
构建启动容器docker-compose up -d
暂停容器docker-compose pause
恢复容器docker-compose unpause
删除容器docker-compose rm
停止容器docker-compose stop
启动容器docker-compose start
登录到容器中docker-compose exec bash
删除所有容器,镜像docker-compose down
显示所有容器docker-compose ps
重新启动容器docker-compose restart
在 php-fpm中不启动关联容器,并容器执行$ php -v
执行完成后删除容器docker-compose run --no-deps --rm php-fpm php -v
构建镜像docker-compose build
不带缓存的构建docker-compose build --no-cache
查看的日志docker-compose logs
验证配置文件docker-compose config -q
以json的形式输出的docker日志docker-compose events --json
官方文档:https://docs.docker.com/ee/
参考地址:http://www.runoob.com/docker/docker-command-manual.html
官方文档:https://docs.docker.com/engine/reference/builder/
参考地址:https://yeasy.gitbooks.io/docker_practice/image/dockerfile/
FROM python:3.7
COPY ./pip.conf /root/.config/pip/
WORKDIR /source_code
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
新建文件夹mkdir <dirname>
(可选,但推荐)
在目标目录中创建 Dockerfile文件$ vim Dockerfile
写入自定义配置内容...
使用docker build .
命令构建新的镜像,注意那个点,表示使用当前目录配置文件,若在构建时需要对镜像命名,则使用-t
参数docker build -t <image-name> .
使用docker run -it <image-name> bash
进入系统
在构建部分有版本要求的镜像时尽量不要用 lastst版本,为了配置个国内源,曾在寻找 ubuntu:lastst 版本号中消耗大量时间
官方文档:https://docs.docker.com/compose/compose-file/
参考地址:https://www.jianshu.com/p/2217cfed29d7
注意:配置版本有区别
共享卷
example
version: "3.2"
services:
web:
image: nginx:alpine
volumes:
- type: volume
source: mydata
target: /data
volume:
nocopy: true
- type: bind
source: ./static
target: /opt/app/static
db:
image: postgres:latest
volumes:
- "/var/run/postgres/postgres.sock:/var/run/postgres/postgres.sock"
- "dbdata:/var/lib/postgresql/data"
volumes:
mydata:
dbdata:
volumes:
# 在指定路径创建一个卷
- /var/lib/mysql
# 指定绝对路径映射
- /opt/data:/var/lib/mysql
# 主机上相对于合成文件的路径
- ./cache:/tmp/cache
# 用户相对路径
- ~/configs:/etc/configs/:ro
# 命名卷
- datavolume:/var/lib/mysql
type -> 装载类型卷、绑定或tmpfs
source -> 装载源、绑定装载主机上的路径或顶层卷密钥中定义的卷的名称。不适用于tmpfs安装
target -> 安装卷的容器中的路径
read_only -> 是否只读
bind -> 配置其他绑定选项
propagation -> 用于绑定的传播模式
volume -> 配置其他卷选项
nocopy -> 创建卷时禁止从容器复制数据
tmpfs -> 配置其他的 tmpfs 选项
size -> tmpfs 装载的大小(以字节为单位)
version: "3"
services:
nginx:
image: nginx
ports:
- "80:80"
- "443:443"
networks:
- www
volumes:
# 主配置文件
- "./nginx/nginx.conf:/etc/nginx/nginx.conf"
# 站点配置文件
- "./nginx/conf.d:/etc/nginx/conf.d"
# 日志文件
- "./nginx/log:/var/log/nginx"
# 运行文件
- "./nginx/run:/run"
networks:
www:
version: "3"
services:
backend:
build: ./backend/
networks:
- www
networks:
www: