1、 Docker 镜像命令
1.1 查看镜像
- docker images
- OPTIONS参数说明:
- -a:列出本地所有的镜像(含中间映像层)
- -q :只显示镜像ID
- –digests :显示镜像的摘要信息
- –no-trunc :显示完整的镜像信息
- OPTIONS参数说明:
1.2 搜索镜像
- docker search [OPTIONS] 镜像名称
- OPTIONS参数说明:
- –no-trunc : 显示完整的镜像描述。
- -s : 列出收藏数不小于指定值的镜像。
- –automated : 只列出 automated build类型的镜像。
- OPTIONS参数说明:
1.3 拉取镜像
- docker pull 镜像名字[:TAG]
1.4 删除镜像
- docker rmi 镜像名称或镜像ID
#删除单个或多个镜像 docker rmi -f 镜像ID 镜像ID 镜像名:TAG #删除全部镜像 docker rmi `docker images -q`
2、 Docker 容器命令
2.1 启动容器
- docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
- OPTIONS参数说明:- –name=“容器新名字”: 为容器指定一个名称;
- -d: 后台运行容器,并返回容器ID,也即启动守护式容器;
- -i:以交互模式运行容器,通常与 -t 同时使用;
- -t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- -P: 随机端口映射;
- -p: 指定端口映射,格式为【ip:hostPort:containerPort、ip::containerPort、hostPort:containerPort、containerPort】
- 示例一:启动交互式容器
#启动时进入容器 docker run -it --name=os01 centos /bin/bash #退出容器 exit 容器停止退出 Ctrl+P+Q 容器不停止退出
- 示例二:启动守护式容器
#运行tomcat docker run --name isTom -p 8080:8080 -d 8973f493aa0a #进入守护式容器 docker exec -it 1e04952a04b4 /bin/bash #退出容器 exit 容器停止退出 Ctrl+P+Q 容器不停止退出
2.2 停止容器
- docker stop 容器ID
#停止多个容器
docker stop 容器ID 容器ID
#停止所有容器
docker stop `docker ps -aq`
2.3 重启容器
- docker restart 容器ID
#重启多个容器
docker restart容器ID 容器ID
#重启所有容器
docker restart`docker ps -aq`
2.4 删除容器
- 删除多个容器
docker rm -f 容器ID 容器ID
- 删除所有容器
text docker rm `docker ps -a -q`
2.5 查看容器日志
- docker logs -f -t 容器ID
- 参数说明:
- -t: 加入时间戳
- -f: 跟随最新的日志打印
- --tail 数字: 显示最后多少条
2.6 查看容器内运行的进程
- docker top 容器ID
2.7 查看容器内部细节
- docker inspect 容器ID
2.8 与运行中容器进行交互
- docker exec -it 容器ID /bin/bash
- docker attach 容器ID
- exec与attach区别:
- exec是在容器中打开新的终端,并且可以启动新的进程。
- attach是直接进入容器启动命令的终端,不会启动新的进程。
2.9 文件拷贝
- 拷贝本机文件至容器【docker cp 需要拷贝的文件或目录 容器名称:容器目录】
docker cp /opt/a.txt 1e04952a04b4:/usr/local/tomcat/temp
- 拷贝容器中文件至本机
docker cp 1e04952a04b4:/usr/local/tomcat/temp/a.txt /root
2.10 目录挂载
-
docker run -v 宿主机目录:容器目录 -di 0f3e07c0138f
#挂载目录 docker run --name isTom02 -v /opt/hf:/usr/local/tomcat/hf --privileged=true -p 8080:8080 -d 8973f493aa0a #挂载目录(带权限) docker run --name isTom02 -v /opt/hf:/usr/local/tomcat/hf:rw --privileged=true -p 8080:8080 -d 8973f493aa0a #挂载目录开放容器中root权限 --privileged=true docker run --name isTom02 -v /opt/hf:/usr/local/tomcat/hf:rw --privileged=true -p 8080:8080 -d 8973f493aa0a
-
查看挂载信息
docker inspect 容器ID
-
测试挂载
#1 在宿主机目录下创建文件 cd /opt/hf touch hello.txt #2 进入容器查看容器内挂载目录
3、 Docker 常用容器部署
3.1 MYSQL容器部署
- 拉取容器
docker pull mysql:5.5.62
- 部署容器
#33306=》:MySQL端口 docker run --name isSql -e MYSQL_ROOT_PASSWORD=123456 -p 33306:3306 -d d404d78aa797 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
- 测试部署
3.2 Redis容器部署
- 拉取容器
docker pull redis
- 部署容器
#6379=》6379:Redis通信端口 docker run --name isRedis -p 6379:6379 -d 01a52b3b5cd1
- 测试部署
3.3 Nginx容器部署
- 拉取容器
docker pull nginx
- 部署容器
#80=》:WEB端口 docker run --name isNginx -p 80:80 -d f949e7d76d63
- 测试部署
3.4 Tomcat容器部署
- 拉取容器
docker pull tomcat
- 部署容器
#18080=》8080:WEB端口 docker run --name isTom -p 18080:8080 -d 8973f493aa0a
- 测试部署
3.5 ES容器部署
- 拉取容器
docker pull elasticsearch:5.6.8
- 部署容器
#9200=》9200:WEB端口 9300=》9300:ES集群通信端口 docker run -e ES_JAVA_OPTS="-Xms512m -Xmx512m" -p 9200:9200 -p 9300:9300 --name ES -d 6c0bdf761f3b
- 测试部署
3.6 ES UI容器部署
- 拉取容器
docker pull mobz/elasticsearch-head:5
- 部署容器
#9100=》9100:WEB端口 docker run -p 9100:9100 --name es-ui -d b19a5c98e43b
- 测试部署
3.7 ActiveMQ容器部署
- 拉取容器
docker pull webcenter/activemq
- 部署容器
#61616=》61616:内部映射端口 8161=》8161:WEB端口 默认用户名密码:admin docker run --name isActiveMQ -p 61616:61616 -p 8161:8161 -d 3af156432993
- 测试部署
3.8 RabbitMQ容器部署
- 拉取容器
docker pull rabbitmq:management
- 部署容器
#15672=》15672:WEB端口 5672=》5672:内部通信端口 默认用户名密码:guest docker run --name isRabbitMQ -p 5672:5672 -p 15672:15672 -d ac464814723d
- 测试部署
4 、Docker 镜像备份/迁移
4.1 容器保存为镜像
#docker commit 镜像名称 新的镜像名称
docker commit isRedis copy_redis
4.2 镜像备份
#docker save -o 备份名称 需要备份的镜像名称
docker save -o copy_redis.tar copy_redis
4.3 镜像恢复/迁移
- 删除原有镜像
docker rmi -f 71500d0e5c48
- 镜像恢复
docker load -i copy_redis.tar
5、Dockerfile详解
5.1 什么是Dockerfile?
- Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。
- 对于开发人员:可以为开发团队提供一个完全一致的开发环境。
- 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了。
- 对于运维人员:在部署时,可以实现应用的无缝移植。
5.2 Dockerfile常用命令
命令 | 作用 |
---|---|
FROM 镜像名称:TAG | 定义了使用哪个基础镜像启动构建流程 |
MAINTAINER 创建者 | 声明镜像的创建者 |
ENV key value | 设置环境变量 (可以写多条) |
RUN command | 是Dockerfile的核心部分(可以写多条) |
ADD 宿主机源文件 目标文件 | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
COPY 宿主机源文件 目标文件 | 和ADD相似,但是如果有压缩文件并不能解压 |
WORKDIR path_dir | 设置工作目录 |
5.3 使用Dockerfile构建镜像【以构建jdk 1.8为例】
5.3.1 创建目录【用于存放源文件】
mkdir -p /opt/module/docker_repo
5.3.2 上传jdk至该目录
5.3.3 创建Dockerfile文件
#创建命令【必须是此名称】
vim Dockerfile
#Dockerfile内容
#依赖镜像名称或镜像ID【必须再本地列表中】
FROM centos
#指定镜像创建者信息
MAINTAINER HF
#切换工作目录
WORKDIR /opt/module/docker_repo
RUN mkdir /opt/module/docker_repo/java
#ADD 是相对路径jar,把java添加到容器中
ADD jdk-8u171-linux-x64.tar.gz /opt/module/docker_repo/java
#配置java环境变量
ENV JAVA_HOME /opt/module/docker_repo/java/jdk1.8.0_171
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
5.3.4 执行构建
#末尾空格和.不能省略
docker build -t='jdk1.8.0_171' .
5.3.5 查看构建后结果
docker images
6、Docker 私有仓库
6.1 拉取私有仓库镜像
docker pull registry
6.2 启动私有仓库容器
docker run -di --name is_registry -p 5000:5000 registry
6.3 私有仓库访问测试
192.168.44.113:5000/v2/_catalog
6.4 修改daemon.json配置
#编辑
vim /etc/docker/daemon.json
#添加内容:目的是为了让docker信任私有仓库
{
"insecure-registries": ["192.168.44.113:5000"]
}
6.5 开启registry仓库远程访问
#编辑
vim /lib/systemd/system/docker.service
#修改配置
在ExecStart后添加 -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \
6.6 刷新docker配置并重启
#刷新配置
systemctl daemon-reload
#重启docker容器
systemctl restart docker
6.7 上传镜像至私有仓库
- 标记镜像为私有仓库镜像
docker tag jdk1.8.0_171 192.168.44.113:5000/jdk1.8.0_171
- 重新启动私服容器
docker start registry
- 上传标记镜像至私有仓库
docker push 192.168.44.113:5000/jdk1.8.0_171
- 重新访问私有仓库。