使用虚拟机系统版本为 centOS 7,使用下列命令查看内核版本,官方建议内核版本应在 3.10 以上
uname -r
内核版本验证满足后,安装 yum 的工具包,,yum-util 提供 yum-config-manager 功能,另两个是 devicemapper 驱动依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
设置 yum 源(阿里仓库)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
查看 docker 版本
yum list docker-ce --showduplicates | sort -r
选择相应版本进行安装
yum install docker-ce-18.03.1.ce-1.el7.centos
启动 docker 并设置开机自启
systemctl start docker
systemctl enable docker
查看 docker 版本,验证安装
[root@localhost ~]# docker version
Client:Version: 18.03.1-ceAPI version: 1.37Go version: go1.9.5Git commit: 9ee9f40Built: Thu Apr 26 07:20:16 2018OS/Arch: linux/amd64Experimental: falseOrchestrator: swarmServer:Engine:Version: 18.03.1-ceAPI version: 1.37 (minimum version 1.12)Go version: go1.9.5Git commit: 9ee9f40Built: Thu Apr 26 07:23:58 2018OS/Arch: linux/amd64Experimental: false
至此 docker 安装完成!
针对 Docker 客户端版本大于 1.10.0 的用户,可以通过修改 daemon 配置文件/etc/docker/daemon.json
来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{"registry-mirrors": ["https://xxxxxx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
搜索镜像
Usage: docker search [OPTIONS] TERMSearch the Docker Hub for imagesOptions:-f, --filter filter Filter output based on conditions provided--format string Pretty-print search using a Go template--limit int Max number of search results (default 25)--no-trunc Don't truncate output
下载镜像
Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]Pull an image or a repository from a registryOptions:-a, --all-tags Download all tagged images in the repository--disable-content-trust Skip image verification (default true)
查看镜像
Usage: docker images [OPTIONS] [REPOSITORY[:TAG]]List imagesOptions:-a, --all Show all images (default hides intermediate images)--digests Show digests-f, --filter filter Filter output based on conditions provided--format string Pretty-print images using a Go template--no-trunc Don't truncate output-q, --quiet Only show numeric IDs
删除本地镜像
Usage: docker rmi [OPTIONS] IMAGE [IMAGE...]Remove one or more imagesOptions:-f, --force Force removal of the image--no-prune Do not delete untagged parents
保存镜像
Usage: docker save [OPTIONS] IMAGE [IMAGE...]Save one or more images to a tar archive (streamed to STDOUT by default)Options:-o, --output string Write to a file, instead of STDOUT
加载镜像
Usage: docker load [OPTIONS]Load an image from a tar archive or STDINOptions:-i, --input string Read from tar archive file, instead of STDIN-q, --quiet Suppress the load output
查看容器
Usage: docker ps [OPTIONS]List containersOptions:-a, --all Show all containers (default shows just running)-f, --filter filter Filter output based on conditions provided--format string Pretty-print containers using a Go template-n, --last int Show n last created containers (includes all states) (default -1)-l, --latest Show the latest created container (includes all states)--no-trunc Don't truncate output-q, --quiet Only display numeric IDs-s, --size Display total file sizes
停止容器
Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...]Stop one or more running containersOptions:-t, --time int Seconds to wait for stop before killing it (default 10)
启动已经停止的容器
Usage: docker start [OPTIONS] CONTAINER [CONTAINER...]Start one or more stopped containersOptions:-a, --attach Attach STDOUT/STDERR and forward signals--detach-keys string Override the key sequence for detaching a container-i, --interactive Attach container's STDIN
重启容器
Usage: docker restart [OPTIONS] CONTAINER [CONTAINER...]Restart one or more containersOptions:-t, --time int Seconds to wait for stop before killing the container (default 10)
进入容器
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]Run a command in a running containerOptions:-d, --detach Detached mode: run command in the background--detach-keys string Override the key sequence for detaching a container-e, --env list Set environment variables-i, --interactive Keep STDIN open even if not attached--privileged Give extended privileges to the command-t, --tty Allocate a pseudo-TTY-u, --user string Username or UID (format: [:])-w, --workdir string Working directory inside the container
删除容器
Usage: docker rm [OPTIONS] CONTAINER [CONTAINER...]Remove one or more containersOptions:-f, --force Force the removal of a running container (uses SIGKILL)-l, --link Remove the specified link-v, --volumes Remove the volumes associated with the container
导出容器
Usage: docker export [OPTIONS] CONTAINERExport a container's filesystem as a tar archiveOptions:-o, --output string Write to a file, instead of STDOUT
导入容器
Usage: docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]Import the contents from a tarball to create a filesystem imageOptions:-c, --change list Apply Dockerfile instruction to the created image-m, --message string Set commit message for imported image
查看运行日志
Usage: docker logs [OPTIONS] CONTAINERFetch the logs of a containerOptions:--details Show extra details provided to logs-f, --follow Follow log output--since string Show logs since timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)--tail string Number of lines to show from the end of the logs (default "all")-t, --timestamps Show timestamps--until string Show logs before a timestamp (e.g. 2013-01-02T13:23:37) or relative (e.g. 42m for 42 minutes)
Dockerfile 是用于构建镜像的文本文件,其中包含了构建镜像所需的指令与说明。
FROM 指定基础镜像
FROM centos:7
LABEL 为镜像添加元数据
LABEL maintainer="XXXX
MAINTAINER 指定维护者信息
MAINTAINER zqf
RUN 执行命令
在构建镜像时运行的 Shell 命令
RUN
RUN ["executable", "param1", "param2"]
CMD 容器启动命令
启动容器时执行的 Shell 命令,若存在多个则仅最后一条命令生效,且CMD
设置的指令会被docker run
命令中指定的运行参数所覆盖
CMD ["executable", "param1", "param2"] (推荐使用)
CMD ["param1", "param2"] (为 ENTRYPOINT 指令提供预设参数)
CMD command param1 param2 (在 Shell 中执行)
ENTRYPOINT 入口点
类似于CMD
指令,但是其不会被docker run
命令指定的运行参数覆盖,这些运行参数会被当作参数传送给ENTRYPOINT
执行。但是, 如果运行docker run
时使用了--entrypoint
选项,将覆盖 ENTRYPOINT
指令指定的程序
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
EXPOSE 声明暴露的端口
EXPOSE 80 8080
ENV 设置环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_45
ADD 复制文件
将文件或者目录拷贝到镜像当中,若添加的目标源为 URL 或者压缩包,则会自动进行下载以及解压
ADD /root/test /var/test
COPY 复制文件
将文件或目录拷贝到镜像当中,用法同ADD
,但是不会自动下载和解压
COPY ./start.sh /start.sh
VOLUME 指定挂载点
指定容器挂载点到宿主机自动生成的目录,一般不会在 dockerfile 中指定,而是在docker run
中指定
VOLUME ["/var/lib/mysql"]
WORKDIR 切换工作目录
切换工作目录,类似cd
WORKDIR /data
USER 设置用户
为RUN
\CMD
\ENTRYPOINT
所设定的命令指定运行的用户
USER root
ARG 设构建参数
使用该指可以定义变量,并在构建镜像时进行指定
ARG [=]
HEALTHCHECK 指定健康监察参数
--interval=DURATION (default: 30s)
:每隔多长时间探测一次,默认30秒 ;
--timeout=DURATION (default: 30s)
:服务响应超时时长,默认30秒 ;
--start-period= DURATION (default: 0s)
:服务启动多久后开始探测,默认0秒 ;
--retries=N (default: 3)
:认为检测失败几次为宕机,默认3次;
HEALTHCHECK --interval=5m --timeout=3s --retries=31
创建 Dockerfile 文件
vim Dockerfile
在文件中使用 Dockerfile 指令对镜像进行简单配置
FROM nginx
RUN echo 'Test Dockerfile, Hello World!' > /usr/share/nginx/html/index.html
在 Dockerfile 所在文件夹执行命令构建镜像(注:最后的点表示当前路径)
docker build -t nginx:my .
执行下列命令,启动 docker 容器
docker run -d -p 8080:80 nginx:my
访问 ip:8080
,即可看到修改后的 Nginx 欢迎页
首先创建 Dockerfile 文件
vim Dockerfile
在文件中对镜像进行配置(打包好的 jar 包应与 Dockerfile 放在同一路径下)
# 基础镜像
FROM openjdk:11.0.4
# author
MAINTAINER zqf
ENV TZ=Asia/Shanghai
# 挂载目录
VOLUME /tmp
# 指定路径
WORKDIR /data
# 复制jar文件到路径
ADD loginAndAuthDemo-1.0-SNAPSHOT.jar /data
# 容器提供的端口号
EXPOSE 8080
# 启动Jar包
ENTRYPOINT ["java","-jar","/data/loginAndAuthDemo-1.0-SNAPSHOT.jar"]
构建镜像
docker build -t loginandauth:0.0.1 .
[root@ZQFLinux docker]# docker build -t loginandauth:0.0.1 .
Sending build context to Docker daemon 39.24MB
Step 1/8 : FROM openjdk:11.0.4---> e6ca4006334d
Step 2/8 : MAINTAINER zqf---> Running in 34ba969baa70
Removing intermediate container 34ba969baa70---> 15ed171a1587
Step 3/8 : ENV TZ=Asia/Shanghai---> Running in 79471ebe5815
Removing intermediate container 79471ebe5815---> 9a3ea2277644
Step 4/8 : VOLUME /tmp---> Running in c049ae463b63
Removing intermediate container c049ae463b63---> 5261815b1615
Step 5/8 : WORKDIR /data
Removing intermediate container 289b5c915c77---> 31ae4e733e04
Step 6/8 : ADD loginAndAuthDemo-1.0-SNAPSHOT.jar /data---> 60bcb3ae3760
Step 7/8 : EXPOSE 8080---> Running in 6b0f285a81d0
Removing intermediate container 6b0f285a81d0---> 2edcbfdbaab7
Step 8/8 : ENTRYPOINT ["java","-jar","/data/loginAndAuthDemo-1.0-SNAPSHOT.jar"]---> Running in 2365c4a17fb4
Removing intermediate container 2365c4a17fb4---> 9921129fb03e
Successfully built 9921129fb03e
Successfully tagged loginandauth:0.0.1
启动容器
docker run -d -p 8080:8080 loginandauth:0.0.1
访问相应的ip:端口号
,测试镜像是否正常运行(也可以通过docker logs
查看日志)
composr version
version: '3.7' # 指定 compose 文件的版本
services
services 是定义服务的顶级属性,其下一级的属性就是一个服务
services:aaa: # 服务aaabbb: # 服务bbb
networks
networks 是定义网络的顶级属性,其下一级属性就是一个网络
networks:aaa: # 网络aaadriver: overlay # 网络类型
build
build: # 与 image 二选一,指定包含构建上下文的路径, 或作为一个对象,该对象具有 context 和指定的 dockerfile 文件以及 args 参数值context: . # context: 指定 Dockerfile 文件所在的路径dockerfile: Dockerfile # dockerfile: 指定 context 指定的目录下面的 Dockerfile 的名称(默认为 Dockerfile)args: # args: Dockerfile 在 build 过程中需要的参数 (等同于 docker container build --build-arg 的作用)JAR_FILE: service.jarcache_from: # v3.2中新增的参数, 指定缓存的镜像列表 (等同于 docker container build --cache_from 的作用)labels: # v3.3中新增的参数, 设置镜像的元数据 (等同于 docker container build --labels 的作用)shm_size: # v3.5中新增的参数, 设置容器 /dev/shm 分区的大小 (等同于 docker container build --shm-size 的作用)
ports
ports: # 建立宿主机与容器间的端口映射关系,上面是短语法写法,下面是长语法写法- target: 80 # 容器端口published: 80 # 宿主机端口protocol: tcp # 协议类型mode: host # host 在每个节点上发布主机端口,ingress 对于集群模式端口进行负载均衡- target: 443published: 443protocol: tcpmode: host
command
command: # 覆盖容器启动后默认执行的命令, 支持 shell 格式和 [] 格式
cgroup_parent
cgroup_parent: # 为容器指定父 cgroup 组,意味着将继承该组的资源限制
container_name
container_name: # 指定容器的名称 (等同于 docker run --name 的作用)
deploy
deploy: # v3 版本以上, 指定与部署和运行服务相关的配置, deploy 部分是 docker stack 使用的, docker stack 依赖 docker swarmendpoint_mode: vip # v3.3 版本中新增的功能, 指定服务暴露的方式# vip:Docker 为该服务分配了一个虚拟 IP(VIP), 作为客户端的访问服务的地址# dnsrr:DNS 轮询, Docker 为该服务设置 DNS 条目, 使得服务名称的 DNS 查询返回一个 IP 地址列表, 客户端直接访问其中的一个地址labels: # 指定服务的标签,这些标签仅在服务上设置mode: replicated # 指定 deploy 的模式# global:每个集群节点都只有一个容器# replicated:用户可以指定集群中容器的数量(默认)placement:constraints:- node.role==manager # 指定该服务部署的节点,该指令表示将该服务部署到名为 master 的节点replicas: 1 # deploy 的 mode 为 replicated 时, 指定容器副本的数量resources: # 资源限制limits: # 设置容器的资源限制cpus: "0.5" # 设置该容器最多只能使用 50% 的 CPUmemory: 50M # 设置该容器最多只能使用 50M 的内存空间reservations: # 设置为容器预留的系统资源(随时可用)cpus: "0.2" # 为该容器保留 20% 的 CPUmemory: 20M # 为该容器保留 20M 的内存空间restart_policy: # 定义容器重启策略, 用于代替 restart 参数condition: on-failure # 定义容器重启策略(接受三个参数)# none:不尝试重启# on-failure:只有当容器内部应用程序出现问题才会重启# any:无论如何都会尝试重启(默认)delay: 10s # 尝试重启的间隔时间(默认为 0s)max_attempts: 6 # 尝试重启次数(默认一直尝试重启)window: 120s # 检查重启是否成功之前的等待时间(即如果容器启动了, 隔多少秒之后去检测容器是否正常, 默认 0s)update_config: # 用于配置滚动更新配置parallelism: 1 # 一次性更新的容器数量delay: 10s # 更新一组容器之间的间隔时间order: stop-first # v3.4 版本中新增的参数, 回滚期间的操作顺序# stop-first:旧任务在启动新任务之前停止(默认)# start-first:首先启动新任务, 并且正在运行的任务暂时重叠failure_action: continue # 定义更新失败的策略# continue:继续更新# rollback:回滚更新# pause:暂停更新(默认)# monitor:每次更新后的持续时间以监视更新是否失败(单位: ns|us|ms|s|m|h) (默认为0)max_failure_ratio: 0 # 回滚期间容忍的失败率(默认值为0)rollback_config: # v3.7 版本中新增的参数, 用于定义在 update_config 更新失败的回滚策略parallelism: 1 # 一次回滚的容器数, 如果设置为0, 则所有容器同时回滚delay: 0 # 每个组回滚之间的时间间隔(默认为0)failure_action: continue # 定义回滚失败的策略# continue:继续回滚# pause:暂停回滚monitor: 10s # 每次回滚任务后的持续时间以监视失败(单位: ns|us|ms|s|m|h) (默认为0)max_failure_ratio: 0 # 回滚期间容忍的失败率(默认值0)order: stop-first # 回滚期间的操作顺序# stop-first:旧任务在启动新任务之前停止(默认)# start-first:首先启动新任务, 并且正在运行的任务暂时重叠
device
devices: # 指定设备映射列表(等同于 docker run --device 的作用)
depend_on
depends_on: # 指定依赖容器- aaa # 容器 aaa- bbb # 容器 bbb
dns
dns: # 设置 DNS 地址(等同于 docker run --dns 的作用)dns_search: # 设置 DNS 搜索域(等同于 docker run --dns-search 的作用)
temfs
tmpfs: # v2 版本以上, 挂载目录到容器中, 作为容器的临时文件系统(等同于 docker run --tmpfs 的作用, 在使用 swarm 部署时将忽略该选项)
entrypoint
entrypoint: # 覆盖容器的默认 entrypoint 指令 (等同于 docker run --entrypoint 的作用)
env_file
env_file: # 从指定文件中读取变量设置为容器中的环境变量, 可以是单个值或者一个文件列表, 如果多个文件中的变量重名则后面的变量覆盖前面的变量, environment 的值覆盖 env_file 的值RACK_ENV=development
volumes
volumes: # 定义容器和宿主机的数据卷映射关系- "/u01:/u01" # 映射容器内的 /u01 到宿主机的 /u01目录
environment
environment: # 设置环境变量, environment 的值可以覆盖 env_file 的值 (等同于 docker run --env 的作用)- TZ=Asia/Shanghai- PORT_TO_EXPOSE=80- LOG_PATH=/opt/proj/logs- PROFILES_ACTIVE=prod
expose
expose: # 暴露端口, 但是不能和宿主机建立映射关系, 类似于 Dockerfile 的 EXPOSE 指令
external_links
external_links: # 连接不在 docker-compose.yml 中定义的容器或者不在 compose 管理的容器(docker run 启动的容器, 在 v3 版本中使用 swarm 部署时将忽略该选项)
extra_hosts
extra_hosts: # 添加 host 记录到容器中的 /etc/hosts 中 (等同于 docker run --add-host 的作用)
healthcheck
healthcheck: # v2.1 以上版本, 定义容器健康状态检查, 类似于 Dockerfile 的 HEALTHCHECK 指令test: NONE # 检查容器检查状态的命令, 该选项必须是一个字符串或者列表, 第一项必须是 NONE, CMD 或 CMD-SHELL, 如果其是一个字符串则相当于 CMD-SHELL 加该字符串# NONE:禁用容器的健康状态检测# CMD:test: ["CMD", "curl", "-f", "http://localhost"]# CMD-SHELL:test: ["CMD-SHELL", "curl -f http://localhost || exit 1"] 或者 test: curl -f https://localhost || exit 1interval: 1m30s # 每次检查之间的间隔时间timeout: 10s # 运行命令的超时时间retries: 3 # 重试次数start_period: 40s # v3.4 以上新增的选项, 定义容器启动时间间隔disable: true # true 或 false, 表示是否禁用健康状态检测和 test: NONE 相同
image
image: # 指定 docker 镜像, 可以是远程仓库镜像、本地镜像
init
init: # v3.7 中新增的参数, true 或 false 表示是否在容器中运行一个 init, 它接收信号并传递给进程
isolation
isolation: # 隔离容器技术, 在 Linux 中仅支持 default 值
labels
labels: # 使用 Docker 标签将元数据添加到容器, 与 Dockerfile 中的 LABELS 类似
links
links: # 链接到其它服务中的容器, 该选项是 docker 历史遗留的选项, 目前已被用户自定义网络名称空间取代, 最终有可能被废弃(在使用 swarm 部署时将忽略该选项)
logging
logging: # 设置容器日志服务driver: # 指定日志记录驱动程序, 默认 json-file (等同于 docker run --log-driver 的作用)options: # 指定日志的相关参数 (等同于 docker run --log-opt 的作用)max-size: # 设置单个日志文件的大小, 当到达这个值后会进行日志滚动操作max-file: # 日志文件保留的数量
network_mode
network_mode: # 指定网络模式 (等同于 docker run --net 的作用, 在使用 swarm 部署时将忽略该选项)
init
init: # v3.7 中新增的参数, true 或 false 表示是否在容器中运行一个 init, 它接收信号并传递给进程
isolation
isolation: # 隔离容器技术, 在 Linux 中仅支持 default 值
labels
labels: # 使用 Docker 标签将元数据添加到容器, 与 Dockerfile 中的 LABELS 类似
links
links: # 链接到其它服务中的容器, 该选项是 docker 历史遗留的选项, 目前已被用户自定义网络名称空间取代, 最终有可能被废弃(在使用 swarm 部署时将忽略该选项)
logging
logging: # 设置容器日志服务driver: # 指定日志记录驱动程序, 默认 json-file (等同于 docker run --log-driver 的作用)options: # 指定日志的相关参数 (等同于 docker run --log-opt 的作用)max-size: # 设置单个日志文件的大小, 当到达这个值后会进行日志滚动操作max-file: # 日志文件保留的数量
network_mode
network_mode: # 指定网络模式 (等同于 docker run --net 的作用, 在使用 swarm 部署时将忽略该选项)
上一篇:MySQL进阶