Docker 配置
镜像源配置
修改文件 /etc/docker/daemon.json
,如果没有的话创建
$ vim /etc/docker/daemon.json
写入配置
{
"registry-mirrors" : [
"https://mirror.ccs.tencentyun.com",
"http://registry.docker-cn.com",
"http://docker.mirrors.ustc.edu.cn",
"http://hub-mirror.c.163.com"
],
"insecure-registries" : [
"registry.docker-cn.com",
"docker.mirrors.ustc.edu.cn"
],
"experimental" : true
}
然后重启 Docker 即可
# linux 重启方式
$ systemctl restart docker.service
Docker 基础
Docker 包括三个基本概念
- 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
- 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
- 仓库(Repository):仓库可看成一个代码控制中心,用来保存镜像。
Docker 基本操作
查看 Docker 命令
$ docker
如果查看具体某项命令的具体描述,可以使用 docker command --help
$ docker stats --help
Docker 镜像
查看本地主机上的镜像
$ docker images
各选项说明
REPOSITORY
:表示镜像的仓库源TAG
:镜像的标签IMAGE ID
:镜像IDCREATED
:镜像创建时间SIZE
:镜像大小
同一个仓库源由多个版本,使用 TAG
来定义不同的镜像,例如:docker.io/mysql:5.7
、docker.io/mysql:latest
代表了不同版本 mysql 的镜像
获取新的镜像
$ docker pull mysql:5.7
查找镜像
$ docker search httpd
说明
NAME
: 镜像仓库源的名称DESCRIPTION
: 镜像的描述OFFICIAL
: 是否 docker 官方发布stars
: 点赞、喜欢AUTOMATED
: 自动构建
删除镜像命令,删除镜像可以加镜像名、镜像 ID 等
$ docker rmi mysql
创建镜像,使用下面的方式可以创建镜像,详见 Dockerfile
- 从已经创建的容器中更新镜像,并且提交这个镜像
- 使用 Dockerfile 指令来创建一个新的镜像
Dockerfile 示例
FROM centos:6.7
MAINTAINER Fisher "test@163.com"
RUN /bin/echo 'root:123456' |chpasswd
RUN useradd wjw
EXPOSE 22
EXPOSE 80
CMD /usr/sbin/sshd -D
每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的,所以可以用 &&
在同层执行多个指令
然后执行命令创建
$ docker build -t wjw/centos:6.7 .
-
-t
:指定要创建的目标镜像名 -
.
:Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
为镜像添加 TAG,这里为 ID 860c279d2fec 的镜像添加新的 tag
$ docker tag <镜像 ID> wjw/centos:dev
Docker 容器
启动容器需要使用镜像去启动,以下命令使用 mysql 镜像启动一个容器,参数为以命令行模式进入该容器
$ docker run -it mysql /bin/bash
-i
: 交互式操作-t
: 终端/bin/bash
:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash-P
:将容器内部使用的网络端口随机映射到我们使用的主机上-p 4000:5000
:将本机 4000 映射到 docker 5000 端口
查看运行的容器
$ docker ps
$ docker ps -a
$ docker ps -l
-a
参数可以查看包括停止的容器-l
参数查询最后一次创建的容器
启动一个停止的容器
$ docker start <容器 ID>
-d
指定容器后台运行
$ docker run -itd --name mysql-test mysql /bin/bash
-d
后台运行的容器,可以使用命令进入容器,如下两种方式
docker attach
:退出时会导致容器停止docker exec
:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止
$ docker attach <容器 ID>
$ docker exec -it <容器 ID> /bin/bash
停止容器
$ docker stop <容器 ID>
重启容器
$ docker restart <容器 ID>
导出容器,可以使用命令导出容器到本地文件
$ docker export <容器 ID> > mysql.tar
$ docker export 123456 > mysql.tar
选择刚才导出的文件,导入容器
$ cat docker/mysql.tar | docker import - test/mysql:v1
也可以通过指定 URL 或者某个目录来导入
$ docker import http://example.com/exampleimage.tgz example/imagerepo
删除容器
$ docker rm -f <容器 ID>
清理掉所有处于终止状态的容器
$ docker container prune
查看容器的端口映射情况
$ docker port <容器 ID>
$ docker port <容器 name>
查看日志,-f
让 docker logs 像使用 tail -f 一样来输出容器内部的标准输出
$ docker logs -f <容器 ID>
我们还可以使用 docker top 来查看容器内部运行的进程
$ docker top <容器 ID>
使用 docker inspect 来查看 Docker 的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息
$ docker inspect <容器 ID>
其他命令
查看内存使用情况
$ sudo docker system df
Docker Compose
$ docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
-
-f, --file [FILE]
指定使用的 Compose 模板文件,默认为 docker-compose.yml,可以多次指定; -
-p, --project-name [NAME]
指定项目名称,默认将使用所在目录名称作为项目名; -
--x-networking
使用 Docker 的可拔插网络后端特性; -
--x-network-driver [DRIVER]
指定网络后端的驱动,默认为 bridge; -
--verbose
输出更多调试信息; -
-v, --version
打印版本并退出;
常用命令
docker-compose [命令] --help
: 获得一个命令的帮助docker-compose up -d nginx
: 构建启动 nignx 容器- -d 在后台运行服务容器
- –no-color 不使用颜色来区分不同的服务的控制输出
- –no-deps 不启动服务所链接的容器
- –force-recreate 强制重新创建容器,不能与 –no-recreate 同时使用
- –no-recreate 如果容器已经存在,则不重新创建,不能与 –force-recreate 同时使用
- –no-build 不自动构建缺失的服务镜像
- –build 在启动容器前构建服务镜像
- –abort-on-container-exit 停止所有容器,如果任何一个容器被停止,不能与-d同时使用
- -t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
- –remove-orphans 删除服务中没有在 compose 文件中定义的容器
- –scale SERVICE=NUM 设置服务运行容器的个数,将覆盖在 compose 中通过 scale 指定的参数
docker-compose exec nginx bash
: 登录到 nginx 容器中docker-compose down
: 此命令将会停止 up 命令所启动的容器,并移除网络- –rmi [type],删除镜像。
all
: 删除 compose 文件中定义的所有镜像;local
: 删除镜像名为空的镜像 - -v, –volumes,删除已经在 compose 文件中定义的和匿名的附在容器上的数据卷
- –remove-orphans,删除服务中没有在 compose 中定义的容器
- –rmi [type],删除镜像。
docker-compose ps
: 列出项目中目前的所有容器docker-compose restart nginx
: 重新启动nginx容器docker-compose build --no-cache nginx
: 构建镜像- –compress 通过gzip压缩构建上下环境
- –force-rm 删除构建过程中的临时容器
- –no-cache 构建镜像过程中不使用缓存,
- –pull 始终尝试通过拉取操作来获取更新版本的镜像
- -m, –memory MEM为构建的容器设置内存大小
- –build-arg key=val为服务设置build-time变量
docker-compose top
: 查看各个服务容器内运行的进程docker-compose logs -f nginx
: 查看nginx的实时日志docker-compose images
: 列出 Compose 文件包含的镜像docker-compose config
: 验证文件配置- –resolve-image-digests 将镜像标签标记为摘要
- -q, –quiet 只验证配置,不输出。 当配置正确时,不输出任何内容,当文件配置错误,输出错误信息
- –services 打印服务名,一行一个
- –volumes 打印数据卷名,一行一个
docker-compose events --json nginx
: 以json的形式输出nginx的docker日志docker-compose pause nginx
: 暂停nignx容器docker-compose unpause nginx
: 恢复ningx容器docker-compose rm nginx
: 删除容器(删除前必须关闭容器,执行stop)- –f, –force,强制直接删除,包括非停止状态的容器
- -v,删除容器所挂载的数据卷
docker-compose stop nginx
: 停止nignx容器- -t, –timeout TIMEOUT 停止容器时候的超时(默认为10秒)
docker-compose start nginx
: 启动nignx容器docker-compose restart nginx
: 重启项目中的nignx容器docker-compose run --no-deps --rm php-fpm php -v
: 在php-fpm中不启动关联容器,并容器执行php -v 执行完成后删除容器
eg:
- 如何更新容器内容?
$ docker-compose pull $ docker-compose up --detach --build [container name]