Docker 服务
centos通过systemctl命令管理docker服务:
systemctl start docker.service
通过service命令重启Docker服务:
service docker restart
查看版本信息:
docker version
Docker 镜像
获取镜像:
docker pull [name(镜像仓库名)[:tag] ]
查看镜像:
docker images
添加镜像标签:
docker tag [original] [new]
镜像详细信息:
docker inspect [name[:tag] ]
镜像历史:
docker history [name]
搜索镜像:
docker search [name]
删除镜像:
docker rmi IMAGE(tag or imageID)
创建镜像:
- 基于已有镜像的容器创建:
- 启动一个镜像,修改之后退出,记住容器ID
- 使用docker commit 命令提交一个新的镜像
docker commit -m "xxxxx" [-a "xxxxx"] [container ID] [name[:tag] ]
- 基于本地模板导入
docker import - [ name[:tag] ]
存储镜像:
docker save -o xxx.tar [name[:tag] ]
载入镜像:
docker load --input xxx.tar
上传镜像:
docker push name[:tag] | [registry_host[:registry_port]/]name[:tag]
Docker 容器
新建容器:
docker create -it [name[:tag]]
启动容器:
docker start [container ID]
新建并启动容器:
docker run [name[:tag]]
启动一个bash 终端,允许用户进行交互:
docker run -it [name[:tag]] /bin/bash
守护态:
docker run -d
获取容器输出信息:
docker logs
终止容器:
docker stop [container ID]
强行终止容器:
docker kill [container ID]
查看所有容器ID:
docker ps -qa
将一个运行态的容器先终止再启动:
docker restart
进入容器:
- attach (多窗口同步显示,可能阻塞)
docker attach
- exec (推荐)
docker exec -it [container ID] /bin/bash
- nsenter工具
删除容器:
docker rm [-f] [container ID]
导出容器:
docker export -o xxxx.tar [container ID]
导入容器:
docker import [-C|--change[=[]]](导入同时执行对容器修改的dockerfile) [-m | --message[=MESSAGE]] file|URL|-[respository[:tag]]
搭建本地私有仓库
使用registry镜像创建私有仓库:
//下载并启动一个registry容器,默认将仓库创建在容器的/tmp/registry目录
docker run -d -p 5000:5000 registry
//改变仓库目录
docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
管理私有仓库:
e.g.
docker tag ubuntu:14.04 10.0.2.2:5000/test
docker push 10.0.2.2:5000/test
信任该私有仓库,可从该仓库pull镜像:
1. 添加Docker daemon启动参数
DOCKER_OPTS="--INSECURE-REGISTRY 10.0.2.2:5000"
2. 重启Docker服务
数据管理
容器内创建一个数据卷:
docker run -d -P(自动映射到本地主机的临时端口,随机,49000~49900) --name web(container name) -v /webapp(挂载到容器的/webapp目录) training/webapp(iamge name) python app.py
挂载本地已有目录到容器中作为数据卷
(加载主机的绝对路径/src/webapp到容器的/opt/webapp):
docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py
创建一个数据卷容器并创建一个数据卷挂载到/dbdata:
docker run [-it] -v /dbdata --name dbdata ubuntu
在其它容器中使用这个数据卷容器,–volumes-from挂载dbdata中的数据卷:
docker run -it --volumes-from dbdata --name db1 ubuntu
docker run -it --volumes-from dbdata --name db2 ubuntu
数据卷备份(借用一个worker容器,先挂载
dbdata中的数据卷,再挂载本地的当前目录到worker的/backup目录,最后将/dbdata目录下内容压缩复制到本地/backup目录):
docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata
数据恢复:
//先创建一个有卷的容器dbdata2
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
//再创建一个容器,挂载dbdata2容器,并解压备份文件到所挂载的容器卷中
docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
端口映射和容器互联
将本地5000端口映射到容器的500端口:
docker run -d -p 5000:500 training/webapp python app.py
查看当前映射的端口配置:
e.g.
docker port nostalgic_morse 5000
127.0.0.1:49155
容器互联:
//创建一个新的数据库容器
docker run -d --name db trainint/postgres
//再创建一个新的web容器,连接到db容器,web可访问db信息
docker run -d -P --name web --link db:db(别名) training/webapp python app.py
Dockerfile
FROM:指定基础镜像
MAINTAINER: 维护者信息
RUN: 运行指定命令
CMD: 指定启动容器是默认执行的命令,一个Dockerfile只能有一个
LABEL: 元数据标签信息
EXPOSE: 声明镜像内服务所建町的端口,只声明,不会自动完成端口映射
ENV: 指定环境变量
ADD: 复制指定路径(Dockerfile所在路径的相对路径)下的内容到容器中,如果是tar文件,可自动解压,如果是URL,会下载文件;路径支持正则,e.g. ADD *.c /code/
COPY: 只复制文件或者目录到容器里,路径不存在时自动创建,当使用本地目录为源目录时推荐
ENTRYPOINT: 指定镜像的默认入口命令,启动容器时作为根命令执行;此时,CMD命令指定值将作为根命令的参数;一个Dockerfile只能有一个
VOLUME [“/data”]: 从本地主机或其它容器挂载数据卷
USER: 运行容器时的用户名/UID
WORKDIR: 可使用多个,后续如果是相对路径,会基于之前命令指定的路径:
WORKDIR /a
WORKDIR b
最终路径为/a/bARG: 指定镜像内使用的参数
ONBUILD: 当该镜像作为其他镜像基础镜像时所执行的创建操作指令
STOPSIGNAL: 指定所创建镜像启动的容器接收退出的信号值
HEALTHCHECK: 配置所启动容器如何健康检查
SHELL [“executable”, “parameters”]: 指定其他命令使用shell时的默认shell类型,默认为[“bin/sh”, “-c”]
创建镜像:
docker build
忽略匹配模式路径下的目录和文件,使用.dockerignore文件:
e.g.
# comment
*/temp*
*/*/temp*
temp?
~*