Docker环境安装
安装详细说明参考官方文档:https://docs.docker.com/get-docker/
环境信息查看
##查看docker容器版本
docker version
##查看docker容器信息
docker info
##查看docker容器帮助
docker --help
镜像操作
- 查看镜像
##列出本地images
docker images
##含中间映像层
docker images -a
查询出的信息从左到右依次为仓库名称、标签、镜像Id、创建日期
- 拉取镜像
官方镜像仓库地址:https://hub.docker.com/,可以搜索自己需要的镜像和版本,包含详细的说明文档,提供下载命令。
如果搭建了私有仓库,可以在镜像前加上仓库地址下载私有仓库的镜像(私有仓库拉取前要先登录)
##下载Redis官方最新镜像,相当于:docker pull redis:latest
docker pull redis
##下载私人仓库镜像
docker pull bitnami/redis
- 镜像删除
##单个镜像删除,相当于:docker rmi redis:latest
docker rmi redis
##强制删除(针对基于镜像有运行的容器进程)
docker rmi -f redis
##多个镜像删除,不同镜像间以空格间隔
docker rmi -f redis tomcat nginx
- 镜像详细信息查看
##使用 inspect 命令查看镜像详细信息,包括制作者、适应架构、各层的数字摘要等
docker inspect redis
容器操作
- 容器启动
##新建并启动容器,参数:-i 以交互模式运行容器;-t 为容器重新分配一个伪输入终端;--name 为容器指定一个名称
docker run -i -t --name mycentos
##后台启动容器,参数:-d 已守护方式启动容器
docker run -d mycentos
##启动一个或多个已经被停止的容器
docker start redis
##停止一个容器
docker stop redis
##重启容器
docker restart redis
这里再详细说下启动过程中传递环境变量,以springboot项目为例
修改application.yaml配置文件的内容方式有两种,亲测可用
- 将配置文件需要动态传参的地方修改为:${DB_USER:cloud0305},外部传入为:-e DB_USER=“dfdq”
- 不修改原文件,直接借助springboot加载机制,使用配置的全路径:-e
“SPRING_DATASOURCE_DRIVER-CLASS-NAME=org.postgresql.Driver”
docker run \
-p 5200:5200 \
-e REDIS_HOST="10.24.19.124" \
-e REDIS_PORT="6379" \
-e DB_URL="jdbc:postgresql://10.24.19.124:15432/dfdq" \
-e DB_USER="dfdq" \
-e DB_PWD="aaaaaa" \
-e "SPRING_DATASOURCE_DRIVER-CLASS-NAME=org.postgresql.Driver" \
-e "SPRING_DATASOURCE_HIKARI_CONNECTION-TEST-QUERY=SELECT 1" \
-e "SPRING_JPA_PROPERTIES_HIBERNATE_DIALECT=org.hibernate.dialect.CAFPostgreSQL95Dialect" \
-e "CAF-SECURITY_AUTHN_PROVIDERS_USERNAME-PASSWORD-JDBC_DATASOURCE_DRIVER-CLASS-NAME=org.postgresql.Driver" \
--privileged=true \
-d --name 2003_rc2 demo/test:2.0 .
- 容器日志
容器启动后,可以查看内部日志。
不仅可以知晓当前的运行状态,也可以在运行出错的情况下通过日志排查
##查看redis容器日志,默认参数
docker logs rabbitmq
##查看redis容器日志,参数:-f 跟踪日志输出;-t 显示时间戳;--tail 仅列出最新N条容器日志;
docker logs -f -t --tail=20 redis
##查看容器redis从2019年05月21日后的最新10条日志。
docker logs --since="2019-05-21" --tail=10 redis
- 容器的进入与退出
##使用run方式在创建时进入
docker run -it centos /bin/bash
##关闭容器并退出
exit
##仅退出容器,不关闭
快捷键:Ctrl + P + Q
##直接进入centos 容器启动命令的终端,不会启动新进程,多个attach连接共享容器屏幕,参数:--sig-proxy=false 确保CTRL-D或CTRL-C不会关闭容器
docker attach --sig-proxy=false centos
##在 centos 容器中打开新的交互模式终端,可以启动新进程,参数:-i 即使没有附加也保持STDIN 打开;-t 分配一个伪终端
docker exec -i -t centos /bin/bash
##以交互模式在容器中执行命令,结果返回到当前终端屏幕
docker exec -i -t centos ls -l /tmp
##以分离模式在容器中执行命令,程序后台运行,结果不会反馈到当前终端
docker exec -d centos touch cache.txt
- 查看容器
##查看正在运行的容器
docker ps
##查看正在运行的容器的ID
docker ps -q
##查看正在运行+历史运行过的容器
docker ps -a
##显示运行容器总文件大小
docker ps -s
- 容器的停止与删除
##停止一个运行中的容器
docker stop redis
##杀掉一个运行中的容器
docker kill redis
##删除一个已停止的容器
docker rm redis
##删除一个运行中的容器
docker rm -f redis
##删除多个容器
docker rm -f $(docker ps -a -q)
docker ps -a -q | xargs docker rm
## -l 移除容器间的网络连接,连接名为 db
docker rm -l db
## -v 删除容器,并删除容器挂载的数据卷
docker rm -v redis
- 容器与主机间的数据拷贝
##将rabbitmq容器中的文件copy至本地路径
docker cp rabbitmq:/[container_path] [local_path]
##将主机文件copy至rabbitmq容器
docker cp [local_path] rabbitmq:/[container_path]/
##将主机文件copy至rabbitmq容器,目录重命名为[container_path](注意与非重命名copy的区别)
docker cp [local_path] rabbitmq:/[container_path]
参考链接:https://www.cnblogs.com/DeepInThought
全流程总结
上面对镜像的常用操作进行了一次梳理,接下来讲一下如何构建自己的镜像,包含镜像制作、镜像验证、镜像导入导出、镜像上传
1、Dockerfile说明
以下是一个Dockerfile的实例说明
Dockerfile 一般分为四部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令
’#’ 为 Dockerfile 中的注释
# This my first nginx Dockerfile
# Version 1.0
# Base images 基础镜像
FROM centos
#MAINTAINER 维护者信息
MAINTAINER tianfeiyu
#ENV 设置环境变量
ENV PATH /usr/local/nginx/sbin:$PATH
#ADD 文件放在当前目录下,拷过去会自动解压
ADD nginx-1.8.0.tar.gz /usr/local/
ADD epel-release-latest-7.noarch.rpm /usr/local/
#RUN 执行以下命令
RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
RUN useradd -s /sbin/nologin -M www
#WORKDIR 相当于cd
WORKDIR /usr/local/nginx-1.8.0
RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
RUN echo "daemon off;" >> /etc/nginx.conf
#EXPOSE 映射端口
EXPOSE 80
#CMD 运行以下命令
CMD ["nginx"]
2、基于已有的Dockerfile制作镜像
执行命令的docker build命令时候,dockerfile需要在命令执行的当前目录
如果制作的镜像需要上传仓库,则需要加上仓库的前缀
最后的“.”不能丢
docker build -f ./Dockerfile -t repository/demo:2.0 .
3、运行镜像验证
镜像的启动参见:容器操作>>容器启动
需要注意的是容器启动需要的参数均要换成实际能访问的地址,避免localhost
4、将制作的镜像导出到其他环境
此处不能使用docker import,会丢失镜像环境信息
##将镜像导出到tar
docker save -o demo.tar repository/demo:2.0.1
##将镜像导入
docker load -i demo.tar
4、镜像上传仓库
首先需要登录
##账号、密码、仓库地址
docker login -u nx-business-ci -p Test6530 repository-ip
检查镜像名是否和仓库名一致,如果不一致,使用以下命令修改
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
推送镜像
docker push ImageName