Docker使用指北
本文最后更新于:2021年6月23日 凌晨
一、Docker概述
1. Docker 镜像原理
Docker镜像本质上是一个分层文件系统:
- 最底层是bootfs,这里的bootfs使用的是宿主机的bootfs
- 第二层是root文件系统rootfs
- 再往上可以叠加其他的镜像文件
统一文件系统技术(Union File System)将这些不同的层整合成一个系统,供用户使用。
Docker中的一个centos镜像只有200M,而一个centos操作系统的iso文件却要几个G?
- centos的iso镜像包含bootfs和rootfs,而docker的centos镜像复用宿主机的bootfs,只有rootfs和其他镜像层,因此比较小
一个tomcat安装包只有70M,为什么Docker中的tomcat镜像却有500M?
- 因此docker镜像是分层的,虽然其中的tomcat只有70M左右,但依赖的父镜像和基础镜像也不只70M,杂七杂八的加来了就500M了
2. Docker容器虚拟化技术 和 传统虚拟机的比较
- Docker容器和虚拟机具有相似的资源隔离和分配优势,
- 但Docker容器虚拟化的是操作系统,也就是共用软件;而虚拟机虚拟化的是硬件设备。
- 因此,容器优先于宿主机底层内核,只能运行和宿主机同一类型的操作系统,而传统虚拟机可以运行不同的操作系统(如windows主机安装linux虚拟机)
二、Dokcer基础命令
- 查看本地镜像:
docker images
- 拉取镜像:
docker image pull 镜像名称
- 查看运行中的容器:
docker ps
- 查看所有容器:
docker ps -a
- 进入Redis:
docker exec -it redis redis-cli
- 进入MySQL:
docker exec -it mysql /bin/bash
- 创建并启动容器:
docker run 参数
- -d:以守护模式运行容器。需使用docker exec进入容器,退出容器,容器不会关闭,继续在后台运行
- —name:为创建的容器命名
- 关闭容器:docker stop 容器id/容器名
- 删除容器:docker rm 容器id
- 删除镜像:docker rmi 镜像名
- 查看容器日志:docker logs 容器id
- 启动/停止/重启docker服务:
systemctl start/stop/restart docker
- 查看docker服务状态:systemctl status docker
- 设置docker开启启动:systemctl enable docker
三、Dockerfile
命令 | 作用 |
---|---|
FROM image_name:tag | 指明基础镜像 |
MAINTAINER user_name | 声明镜像的创建者 |
ENV key value | 设置环境变量 (可以写多条) |
WORKDIR path_dir | 设置工作目录 |
RUN command | 执行命令 |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
COPY source_dir/file dest_dir/file | 和ADD相似,但是如果有压缩文件并不能解压 |
CMD | 启动容器时的默认命令 |
EXPOSE | 暴露端口 |
示例:
# 自定义centos7镜像,默认登陆路径为/usr,可以使用vim
FROM centos:7
MAINTAINER gaowl@stu.jiangnan.edu.cn
WORKDIR /usr
RUN yum install -y vim
CMD /bin/bash
# 定义dockerfile,发布springboot项目
FROM java:8
MAINTAINER gaowl@stu.jiangnan.edu.cn
ADD springbootDemo.jar app.jar
CMD java -jar app.jar
根据dockerfile编译镜像
docker build -f ./springboot_dockerfile -t app .
- -f:指定dockerfile的路径
- -t:指定镜像名
- 别忘了最后的
.
四、Docker Compose
Docker Compose按照一定规则批量管理容器,避免一个个地手动启停微服务
(1)安装与卸载
# 需先安装Docker,再以编译好的二进制包方式将docker compose安装在Linux系统中。
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
# 设置文件可执行权限
chmod +x /usr/local/bin/docker-compose
# 查看docker-compose 版本信息
docker-compose -version
# 删除二进制文件即可卸载
rm /usr/local/bin/docker-compose
(2)使用compose编排Nginx+Springboot项目
创建空docker-compose目录,并新建docker-compose.yml 文件
version: '3' services: nginx: # 第一个微服务 image: nginx ports: # 端口映射 - 80:80 links: - app volumes: # 目录映射 - ./nginx/conf.d:/etc/nginx/conf.d app: # 第二个微服务 image: app expose: # 暴露端口 - "8080"
创建Nginx配置文件./nginx/conf.d
server { listen 80; access_log off; location / { proxy_pass http://app:8080; } }
在docker-compose目录下,使用docker-compose启动容器
docker-compose up
五、Docker私有仓库
(1)搭建私有仓库
# 1、拉取私有仓库镜像
docker pull registry
# 2、启动私有仓库容器
docker run -id --name=registry -p 5000:5000 registry
# 3、打开浏览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog,看到{"repositories":[]} 表示私有仓库 搭建成功
# 4、修改daemon.json
vim /etc/docker/daemon.json
# 在上述文件中添加一个key,保存退出。此步用于让 docker 信任私有仓库地址;注意将私有仓库服务器ip修改为自己私有仓库服务器真实ip
{"insecure-registries":["私有仓库服务器ip:5000"]}
# 5、重启docker 服务
systemctl restart docker
docker start registry
(2)上传镜像
# 1、标记镜像为私有仓库的镜像
docker tag centos:7 私有仓库服务器IP:5000/centos:7
# 2、上传标记的镜像
docker push 私有仓库服务器IP:5000/centos:7
(3)从私有仓库拉取镜像
docker pull 私有仓库服务器ip:5000/centos:7
参考:
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!