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

参考:

【1】黑马 Docker 笔记_伟大的计算机科学家-CSDN博客


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!