一、Docker概述
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。
基于Linux内核的Cgroup,Namespace,以及AUFS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术,由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。
最初实现是基于LXC,从0.7以后开始去除LXC,转而使用自行开发的Libcontainer,从1.1开始,则进一步演进为使用runC和Containerd。
Docker在容器的基础上,进行了进一步的封装,从文件系统、网络互联到进程隔离等等,极大的简化了容器的创建和维护,使得Docker技术比虚拟机技术更为轻便、快捷。
1、Docker的应用场景
Web 应用的自动化打包和发布。
自动化测试和持续集成、发布。
在服务型环境中部署和调整数据库或其他的后台应用。
从头编译或者扩展现有的 OpenShift 或 Cloud Foundry 平台来搭建自己的 PaaS 环境。
2、核心概念
Client: Client 就是Docker的客户端
Image: image(镜像):是一个极度精简版的Linux程序运行环境,比如vi这种基本的工具都没有,它是需要定制化Build的一个“安装包” 。 Dockerfile 用来创建一个自定义的image,包含用户指定的软件依赖等,使用build命令进行创建。
Container: Container (容器):是Image 的实例,共享系统内核
Daemon: Daemon(守护进程):是创建和运行Container的Linux守护进程,可以理解为Docker Container的Container
Registry: Registry/Hub(镜像仓库):你可以在Docker Hub上轻松下载大量已经容器化好的应用镜像,即拉即用,有些是Docker官方维护的,有些是开发者自发上传分享的。
二、Docker的安装
1、配置环境
卸载旧版本
安装yum-utils,yum-utils: 是一个软件包的集合名称,它包含了一系列有用的YUM工具,如yum-config-manager(用于管理YUM源)、yum-deprecated、yum-groups-manager(管理软件组)、yum-versionlock(锁定软件包版本)等
设置docker仓库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine sudo yum install -y yum-utilssudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo$ sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo $ sudo yum-config-manager --add-repo https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/docker-ce.repo
2、安装docker依赖
安装最新版本的 Docker Engine-Community 和 containerd
1 2 3 4 $ sudo yum install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
安装指定版本的docker
使用yum list docker-ce --showduplicates | sort -r
命令
列出并排序您存储库中可用的版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [root@localhost ~]# yum list docker-ce --showduplicates | sort -r 已加载插件:fastestmirror 已安装的软件包 可安装的软件包 * updates: mirrors.jlu.edu.cn Loading mirror speeds from cached hostfile * extras: mirrors.aliyun.com docker-ce.x86_64 3:26.1.0-1.el7 docker-ce-stable docker-ce.x86_64 3:26.1.0-1.el7 @docker-ce-stable docker-ce.x86_64 3:26.0.2-1.el7 docker-ce-stable docker-ce.x86_64 3:26.0.1-1.el7 docker-ce-stable docker-ce.x86_64 3:26.0.0-1.el7 docker-ce-stable docker-ce.x86_64 3:25.0.5-1.el7 docker-ce-stable docker-ce.x86_64 3:25.0.4-1.el7 docker-ce-stable docker-ce.x86_64 3:25.0.3-1.el7 docker-ce-stable [root@localhost ~]# yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io docker-buildx-plugin docker-compose-plugin
例如:docker-ce-26.1.0
命令格式:yum install docker-ce-26.1.0 docker-ce-cli-26.1.0 containerd.io docker-buildx-plugin docker-compose-plugin
其中:docker-ce 、docker-ce-cli 、和containerd.io 是Docker的核心组件,
分别代表Docker Community Edition、Docker命令行工具和底层容器运行时。
而docker-buildx-plugin 和docker-compose-plugin 则是两个附加的插件
docker-buildx-plugin (BuildKit): Docker Buildx 是一个构建工具,它扩展了Docker的构建功能,允许你跨多架构构建容器镜像,比如同时为amd64、arm64等多种CPU架构生成镜像。
docker-compose-plugin: Docker Compose 是一个用于定义和运行多容器Docker应用的工具。通过一个YAML文件,你可以定义一组相关联的服务及其网络、卷等配置,然后使用一个命令来启动、停止或重建所有的服务。
3、启动docker 1 2 3 4 5 6 7 8 9 10 11 12 sudo systemctl start dockersystemctl enable docker docker version docker info
4、配置镜像加速
国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。
1 2 3 4 5 6 7 8 9 10 11 12 13 cat <<EOF | sudo tee /etc/docker/daemon.json { "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] } EOF systemctl daemon-reload systemctl restart docker
三、Docker的使用 1、常用命令
命令
详解
docker search
搜索镜像
docker pull
获取镜像
docker images
列出镜像
docker run
运行镜像
docker ps
查看后台运行的容器
docker rm
删除容器
docker rmi
删除镜像
docker cp
在host和container之间拷贝文件
docker commit
保存改动为新的镜像
docker build
构建镜像
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 docker search -f stars=1 openjdk docker pull openjdk:11 docker images docker run -p 80:80 -v /var/html:/usr/share/nginx/html/ -d --name=mynginx nginx docker ps docker rm -f db01 db02 docker rmi -f nginx docker cp /www/html 96f7f14e99ab:/www/ docker commit -a "rstyro" -m "测试提交" a404c6c174a2 naginx:v2 docker build -f /path/to/a/Dockerfile . docker inspect nginx docker exec -it a404c6c174a2 /bin/bash
2、Dockerfile
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
1、FROM 指定了基础镜像
2、MAINTAINER 描述这个镜像的作者,以及联系方式(可选)
3、LABEL 镜像的标签信息 (可选)
4、ENV 环境变量配置
5、RUN 在构建镜像时,需要执行的 shel1 命令
6、ADD 将主机中的指定文件复制到容器的目标位置,可以简单理解为 cp 命令
7、WORKDIR 设置容器中的工作目录,如果该目录不存在,那么会自己创建
8、VOLUME 镜像数据卷绑定,将主机中的指定目录挂载到容器中
9、EXPOSE 设置容器启动后要暴露的端口
10、CMD 作用是描述镜像构建完成后,启动容器时默认执行的脚本
11、ENTRYPOINT 和CMD的指令作用一样,不同点:ENTRYPOINT不会被运行容器时指定的命令所覆盖,而CMD 会被覆盖
指令示例如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 FROM openjdk:11 MAINTAINER rstyro LABEL version="1.0" LABEL description="这是我的第一个 Dockerfile" ENV JAVA ENV dev ENV APP NAME test-dockerfile RUN s -al RUN mkdir /www/dockerfile/test ADD ["/www/index.html" ,"/www/server" ] WORKDIR /app RUN pwd VOLUME ["/www/html" ] EXPOSE 8080/tcp CMD ["sh" ,"-c" "ping 127.0.0.1" ] ENTRYPONINT ping 127.0.0.1 ENTRYPONINT ["sh" ,"-c" "ping 127.0.0.1" ]
简单的springboot使用Dockerfile示例:
1 2 3 4 5 6 7 FROM openjdk:8 MAINTAINER rstyro WORKDIR /home/java ADD target/hello-docker-SNAPSHOT.jar /home/java/app.jar EXPOSE 8080 ENTRYPOINT ["java" ,"-jar" ,"/home/java/app.jar" ]
Dockerfile文件配置好之后,就可以执行build命令构建镜像
1 2 3 4 docker build -t myimagename:tag .
3、安装Docker-Compose
1 2 3 4 5 6 7 8 9 10 11 12 13 #!/bin/bash curl -L https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-composeln -s /usr/local/bin/docker-compose /usr/bin/docker-composedocker-compose --version
使用docker-compose启动nginx服务
新建配置文件:docker-compose.yml
编辑内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 version: "2" services: nginx-demo: image: "nginx" restart: "always" networks: - custnet ports: - 80 volumes: - /var/www/html:/usr/share/nginx/html environment: app_env: dev dns: - 8.8 .8 .8 - 114.114 .114 .114 networks: custnet: driver: bridge ipam: driver: default config: - subnet: 10.168 .0 .0 /16 gateway: 10.168 .0 .1
执行:docker-compose -f docker-compose.yml config
校验配置文件是否有问题
没问题就可以启动服务了,docker-compose默认会找当前目录下的 docker-compose.yml
所以我们的命令可以直接使用:docker-compose config
然后在配置文件的同级目录执行:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 docker-compose config docker-compose up -d nginx-demo docker-compose up -d docker-compose stop nginx-demo docker-compose stop docker-compose scale nginx-demo=5
四、Docker本地仓库
搭建私有仓库有:registry、harbor、neuxs(除了可以作为maven仓库,也可以创建docker仓库)
registry是docker官方镜像,命令行版的本地私有仓库
harbor是在registry基础上进行封装,有可视化操作界面
下面是harbor的搭建与使用
1、Harbor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 curl -L https://github.com/goharbor/harbor/releases/download/v2.10.2/harbor-offline-installer-v2.10.2.tgz -o /opt/harbor-offline-installer-v2.10.2.tgz cd /opttar -zxvf harbor-offline-installer-v2.10.2.tgz cd harborcp harbor.yml.tmpl harbor.yml[root@localhost harbor]# vim harbor.yml hostname: 192.168.32.129 ... http: port: 8000 ... harbor_admin_password: 123456 [root@localhost harbor]# ./prepare prepare base dir is set to /opt/harbor WARNING:root:WARNING: HTTP protocol is insecure. Harbor will deprecate http protocol in the future. Please make sure to upgrade to https Generated configuration file: /config/portal/nginx.conf Generated configuration file: /config/log/logrotate.conf Generated configuration file: /config/log/rsyslog_docker.conf Generated configuration file: /config/nginx/nginx.conf Generated configuration file: /config/core/env Generated configuration file: /config/core/app.conf Generated configuration file: /config/registry/config.yml Generated configuration file: /config/registryctl/env Generated configuration file: /config/registryctl/config.yml Generated configuration file: /config/db/env Generated configuration file: /config/jobservice/env Generated configuration file: /config/jobservice/config.yml Generated and saved secret to file: /data/secret/keys/secretkey Successfully called func: create_root_cert Generated configuration file: /compose_location/docker-compose.yml Clean up the input dir [root@localhost harbor]# ./install.sh [root@localhost harbor]# docker-compose ps docker-compose restart docker-compose up -d
网页访问:http://192.168.32.129:8000/ 输入账号密码,即可进入harbor仓库界面
因为我们不是https启动的,所以修改docker的配置/etc/docker/daemon.json文件
insecure-registories
添加我们的仓库,不需要对应证书校验
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 cat <<EOF | sudo tee /etc/docker/daemon.json { "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"], "insecure-registries": ["192.168.32.129:8000"] } EOF systemctl daemon-reload systemctl restart docker docker login -u admin 192.168.32.129:8000 [root@localhost harbor]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 7383c266ef25 3 days ago 188MB [root@localhost harbor]# [root@localhost harbor]# docker tag 7383c266ef25 192.168.32.129:8000/test/mynginx:1.0.0 [root@localhost harbor]# [root@localhost harbor]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE 192.168.32.129:8000/test/mynginx 1.0.0 7383c266ef25 3 days ago 188MB nginx latest 7383c266ef25 3 days ago 188MB [root@localhost harbor]# [root@localhost harbor]# docker push 192.168.32.129:8000/test/mynginx:1.0.0 The push refers to repository [192.168.32.129:8000/test/mynginx] 9fd54926bcae: Pushed 175aa66db4cc: Pushed e6380a7057a5: Pushed 1db2242fc1fa: Pushed b09347a1aec6: Pushed bbde741e108b: Pushed 52ec5a4316fa: Pushed 1.0.0: digest: sha256:810ca58c5f0e8e3bc8b5414028cfd09322757c74b0384e601a98a1e8c8513707 size: 1778 [root@localhost harbor]# [root@localhost harbor]# docker pull 192.168.32.129:8000/test/mynginx:1.0.0
您的打赏,是我创作的动力!不给钱?那我只能靠想象力充饥了。
打赏
微信支付
支付宝