目录

一,简介

1.1 什么是虚拟化

1.2 什么是 Docker

1.3 为什么选择Docker?

1.4 容器与虚拟机的比较

二,Docker 组件

2.1 Docker 服务器与客户端

2.2 Docker 镜像与容器

2.3 Registry(注册中心)

三,Docker安装

3.1官方安装脚本自动安装

3.2手动安装

四,容器镜像的使用

4.1容器常用操作

4.2镜像常用操作

4.3容器与镜像的批操作

五,Dockerfile梳理

5.1基本概念

5.2 常用命令

5.3DockerFile部署一个简单的SpringBoot项目

六,Docker私有仓库搭建与配置

6.1拉取私有仓库镜像

6.2启动私有仓库容器

6.3查看搭建情况

6.4修改配置

6.5Docker私有仓库镜像上传

七,其他一些总结

7.1Docker网络相关

7.2DockerHub相关

7.3Docker Compose相关

7.4Docker Services相关

7.5Docker Stack相关

7.6Docker Machine相关

一,简介

1.1 什么是虚拟化

在计算机中,虚拟化(Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部分是不受现有资源的架构方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。

在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件。对资源充分利用虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等。

1.2 什么是 Docker

  • Docker 是一个开源项目,诞生于2013年初,最初是 dotCloud 公司内部的一个业余项目。它基于 Google 公司推出的 Go 语言实现。项目后来加入了 Linux 基金会,遵从了 Apache 2.0 协议。

  • Docker 自开源后受到广泛的关注和讨论,以至于 dotCloud 公司后来都改名为 Docker Inc。Redhat 已经在其 RHEL6.5 中集中支持 Docker;Google 也在其 PaaS 产品中广泛应用

  • Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。Docker 的基础是 Linux 容器(LXC)等技术

  • 在 LXC 的基础上 Docker 进行了进一步的封装,让用户不需要去关心容器的管理,使得操作更为简便。用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单

1.3 为什么选择Docker?

(1)更高效的利用系统资源

由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker 对系统资源的利用率更高。无论是应用执行速度、内存损耗或者文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往以及运行更多数量的应用

(2)更快速的启动时间

传统的虚拟机技术启动应用服务往往需要数分钟,而 Docker 容器应用,由于直接运行于宿主内核,无需启动完整的操作系统,因此可以做到秒级、甚至毫秒级的启动时间。大大节约了开发、测试、部署的时间

(3)一致的运行环境

开发过程中一个常见的问题是环境一致性问题。由于开发环境、测试环境、生产环境不一致,导致有些bug并未在开发过程中被发现。而 Docker 的镜像提供了除内核外完整的运行时环境,确保了应用环境一致性,从而不会再出现【这段代码在机器上没问题啊】这类问题

(4)持续交付和部署

  • 对开发和运维(DevOps)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行

  • 使用 Docker 可以通过定制应用镜像来实现持续集成、持续交付、部署,开发人员可以通过 Dockerfile 来进行镜像构建,并结合持续集成(Continuous Integration)系统进行集成测试,而运维人员则可以直接在生产环境中快速部署改镜像,甚至结合持续部署(Continuous Delivery/Deployment)系统进行自动部署

  • 使用 Dockerfile 使镜像构建透明化,不仅仅开发团队可以理解应用运行环境,也方便运维团队理解应用运行所需条件,帮助更好的生产环境中部署该镜像

(5)更轻松的迁移

由于 Docker 确保了执行环境的一致性,使得应用的迁移更加容易。Docker 可以在很多平台上运行,无论是物理机、虚拟机、公有云、私有云,甚至是笔记本,其运行结果是一致的。因此用户可以很轻易地将在有个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况

(6)更轻松的维护和扩展

Docker 使用的分层存储已经镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单。此外,Docker 团队同各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大大降低了应用服务的镜像制作成本

1.4 容器与虚拟机的比较

  • 容器是在操作系统层面上进行虚拟操作,直接复用本地主机的操作系统,而传统方式则是在硬件层面进行实现

  • 与传统的虚拟机相比,Docker 优势体现为启动速度快、占用体积小

特性 容器 虚拟机
启动速度 秒级 分钟级
硬盘内存占用 一般为MB 一般为GB
性能 接近原生 弱于原生
系统支持量 单机支持上千个容器 一般几十个

二,Docker 组件

2.1 Docker 服务器与客户端

Docker 是一个客户端-服务器(C/S)架构程序。Docker 客户端只需要向 Docker 服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker 提供了一个命令行工具 Docker 以及一整套 RESTful API。你可以在同一台宿主机上运行 Docker 守护进程和客户端,也可以从本地的 Docker 客户端连接运行在另一台宿主机上的远程 Docker 守护进程。

2.2 Docker 镜像与容器

镜像是构建 Docker 的基石。用于基于镜像来运行自己的容器。镜像也是 Docker 生命周期中的“构建”部分。镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来,例如:

  • 添加一个文件

  • 执行一个命令

  • 打开一个窗口

也可以将镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享、存储和更新

Docker 可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容器即可。容器是基于镜像启动起来的,容器中可以运行一个或多个进程。我们可以认为,镜像是Docker 生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。容器基于镜像启动,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务,所以Docker 容器就是:

  • 一个镜像格式

  • 一些列标准操作

  • 一个执行环境

Docker 借鉴了标准集装箱的概念。标砖集装箱将货物运往世界各地,Docker 将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而Docker 运输软件

和集装箱一样,Docker 在执行上述操作时,并不关心容器中到底装了什么,它不管是web服务器,还是数据库,或者是应用程序服务器什么的。所有的容器都按照相同的方式将内容“装载”进去

Docker 也不关心你要把容器运到何方:我们可以在自己的笔记本中构建容器,上传到Registry,然后下载到一个物理的或者虚拟的服务器来测试,再把容器部署到具体的主机中。就像标准集装箱一样,Docker 容器方便替换,可以叠加,易于分发,并且尽量通用

2.3 Registry(注册中心)

Docker 用 Registry 来保存用户构建的镜像。Registry 分为公共和私有两种。Docker 公司运营公共的 Registry 叫做 Docker Hub。用户可以在 Docker Hub 注册账号,分享并保存自己的镜像(说明:在Docker Hub 下载镜像很慢,可以自己构建私有的 Registry)

三,Docker安装

3.1官方安装脚本自动安装

安装命令如下:

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

也可以使用国内daocloud一键安装命令:

curl -sSL https://get.daocloud.io/docker | sh

3.2手动安装

3.2.1更新yum

yum update

3.2.2卸载旧版本

如果存在较旧版本的docker或者docker-engine,需要先进行卸载这些程序再进行安装。

yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine

3.2.3设置仓库

在新主机上首次安装 Docker Engine-Community 之前,需要设置 Docker 仓库。安装所需的软件包。yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。

yum install -y yum-utils \device-mapper-persistent-data \lvm2

3.2.4设置yum源为阿里云

由于官方源地址安装及较慢,这里我推荐使用阿里云的源地址。

yum-config-manager \--add-repo \http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.2.5安装 Docker

yum -y install docker-ce

3.2.6查看是否安装成功

[root@VM-12-4-centos ~]# docker -v
Docker version 20.10.21, build baeda1f

3.2.7设置ustc镜像

由于docker的部分站点在国外,因此我们拉去一些镜像的时候可能出现速度很慢的情况,我们可以设置ustc镜像加快镜像加载速度。进入docker的配置目录/etc/docker下的daemon.json,添加镜像加速地址。没有的话可以自己创建。

{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

3.2.8启动docker并查看是否启动成功

#启动docker
[root@VM-12-4-centos docker]# systemctl start docker
#查看docker启动状态
[root@VM-12-4-centos docker]# systemctl status docker
● docker.service - Docker Application Container EngineLoaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)Active: active (running) since Fri 2022-12-09 11:00:50 CST; 6 days agoDocs: https://docs.docker.comMain PID: 26411 (dockerd)Tasks: 36Memory: 96.0MCGroup: /system.slice/docker.service├─26411 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.so...├─31554 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 15672 -...├─31562 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 15672 -conta...├─31574 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 5672 -c...└─31579 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 5672 -contai...Dec 09 11:44:18 VM-12-4-centos dockerd[26411]: time="2022-12-09T11:44:18.789880226+08...g"
Dec 09 11:44:25 VM-12-4-centos dockerd[26411]: time="2022-12-09T11:44:25.480743526+08...e"
Dec 15 18:09:07 VM-12-4-centos dockerd[26411]: time="2022-12-15T18:09:07.991298350+08...93
Dec 15 18:09:08 VM-12-4-centos dockerd[26411]: time="2022-12-15T18:09:08.132854373+08...e"
Dec 15 18:13:17 VM-12-4-centos dockerd[26411]: time="2022-12-15T18:13:17.828377419+08...e"
Dec 15 18:13:17 VM-12-4-centos dockerd[26411]: time="2022-12-15T18:13:17.906215774+08...r"
Dec 15 18:13:17 VM-12-4-centos dockerd[26411]: time="2022-12-15T18:13:17.906257764+08:0...
Dec 15 18:16:57 VM-12-4-centos dockerd[26411]: time="2022-12-15T18:16:57.307115182+08...e"
Dec 15 18:16:57 VM-12-4-centos dockerd[26411]: time="2022-12-15T18:16:57.439192680+08...r"
Dec 15 18:16:57 VM-12-4-centos dockerd[26411]: time="2022-12-15T18:16:57.439229990+08:0...
Hint: Some lines were ellipsized, use -l to show in full.
#查看docker对应信息
[root@VM-12-4-centos docker]# docker info
Client:Context:    defaultDebug Mode: falsePlugins:app: Docker App (Docker Inc., v0.9.1-beta3)buildx: Docker Buildx (Docker Inc., v0.9.1-docker)compose: Docker Compose (Docker Inc., v2.12.2)scan: Docker Scan (Docker Inc., v0.21.0)Server:Containers: 2Running: 1Paused: 0Stopped: 1Images: 2Server Version: 20.10.21Storage Driver: devicemapperPool Name: docker-253:1-1311397-poolPool Blocksize: 65.54kBBase Device Size: 10.74GBBacking Filesystem: xfsUdev Sync Supported: trueData file: /dev/loop0Metadata file: /dev/loop1Data loop file: /var/lib/docker/devicemapper/devicemapper/dataMetadata loop file: /var/lib/docker/devicemapper/devicemapper/metadataData Space Used: 1.029GBData Space Total: 107.4GBData Space Available: 23.61GBMetadata Space Used: 19MBMetadata Space Total: 2.147GBMetadata Space Available: 2.128GBThin Pool Minimum Free Space: 10.74GBDeferred Removal Enabled: trueDeferred Deletion Enabled: trueDeferred Deleted Device Count: 0Library Version: 1.02.170-RHEL7 (2020-03-24)Logging Driver: json-fileCgroup Driver: cgroupfsCgroup Version: 1Plugins:Volume: localNetwork: bridge host ipvlan macvlan null overlayLog: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslogSwarm: inactiveRuntimes: io.containerd.runc.v2 io.containerd.runtime.v1.linux runcDefault Runtime: runcInit Binary: docker-initcontainerd version: a05d175400b1145e5e6a735a6710579d181e7fb0runc version: v1.1.4-0-g5fd4c4dinit version: de40ad0Security Options:seccompProfile: defaultKernel Version: 3.10.0-1160.62.1.el7.x86_64Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64CPUs: 2Total Memory: 1.952GiBName: VM-12-4-centosID: EV3B:DGO7:VDHU:WZMU:55HW:K3NG:5BT3:3RQQ:GYNY:SXML:SOEK:YWOEDocker Root Dir: /var/lib/dockerDebug Mode: falseRegistry: https://index.docker.io/v1/Labels:Experimental: falseInsecure Registries:127.0.0.0/8Live Restore Enabled: falseWARNING: the devicemapper storage-driver is deprecated, and will be removed in a future release.
WARNING: devicemapper: usage of loopback devices is strongly discouraged for production use.Use `--storage-opt dm.thinpooldev` to specify a custom block storage device.

其他相关命令如下:

  • 停止docker:systemctl stop docker

  • 重启docker:systemctl restart docker

  • 开机自启:systemctl enable docker

四,容器镜像的使用

4.1容器常用操作

4.1.1单独创建容器

docker create --name my_redis --expose 6379 redis:3.0.2

docker create [options] IMAGE

  • -a, --attach # 附加标准输出/错误

  • -i, --interactive # 附加标准输入(交互式)

  • -t, --tty # 伪终端 pseudo-tty

    --name NAME # 命名你的镜像

  • -p, --publish 5000:5000 # 端口映射(主机:容器)

    --expose 5432 # 向容器公开端口

  • -P, --publish-all # 发布所有端口

    --link container:alias # 链接 linking

  • -v, --volume pwd:/app # mount(需要绝对路径)

  • -e, --env NAME=hello # 环境变量 env vars

4.1.2后台创建和运行容器

docker run -d -p 80:80 docker/getting-started
  • -d - 以分离模式运行容器

  • -p 80:80 - 将端口 80 映射到容器中的端口 80

  • docker/getting-started - 要使用的镜像

4.1.3前台创建并运行容器

docker run -it -p --rm 8001:8080 --name my-nginx nginx
  • -it - 交互式 bash 模式

  • --rm - 容器终止运行后自动删除容器文件

  • -p 8001:8080 - 将 8001 端口映射到容器中的 8080 端口

  • --name my-nginx - 指定名称

  • nginx - 要使用的镜像

4.1.4容器的一般命令

#参数 <container> 可以是容器 id 或名称
docker ps   #列出正在运行的容器
docker ps -a    #列出所有容器
docker ps -s   #列出正在运行的容器 (带 CPU / 内存)
docker exec -it <container>  /bin/bash    #连接到容器
docker logs <container>   #显示容器的控制台日志
docker stop <container>   #停止容器
docker restart <container>    #重启一个容器
docker rm <container> #移除一个容器
docker port <container>   #列出进程
docker kill <container>   #杀死一个容器
docker rename oldname newname #重命名容器

4.1.5容器的启动与停止

#参数 <container> 可以是容器 id 或名称
docker start <container>    #开始
docker stop <container> #停止
docker restart <container>  #重启
docker pause <container>    #暂停
docker unpause <container>  #取消暂停
docker wait <container> #阻塞容器
docker attach <container>   #连接到现有容器
​

4.1.6容器的说明操作

#参数 <container> 可以是容器 id 或名称
docker logs <container> #容器日志
docker inspect <container>  #检查容器
docker events <container>   #容器事件
docker port <container> #公共端口
docker top <container>  #运行进程
docker stats <container>    #容器资源使用
docker diff <container> #列出对容器所做的更改

4.2镜像常用操作

4.2.1查看镜像

[root@VM-12-4-centos ~]# docker images
REPOSITORY   TAG          IMAGE ID       CREATED       SIZE
rabbitmq     management   c8a49f166d2d   6 days ago    257MB
mysql        8.0          7484689f290f   2 weeks ago   538MB
  • REPOSITORY:镜像名称

  • TAG:镜像标签

  • IMAGE ID:镜像ID

  • CREATED:镜像的创建日期(不是获取该镜像的日期)

  • SIZE:镜像大小

这些镜像都是存储在Docker宿主机的var/lib/docker目录下。

4.2.2搜索镜像

[root@VM-12-4-centos ~]# docker search redis
NAME                                DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
redis                               Redis is an open source key-value store that…   11669     [OK]
bitnami/redis                       Bitnami Redis Docker Image                      236                  [OK]
redislabs/redisinsight              RedisInsight - The GUI for Redis                75
redislabs/redisearch                Redis With the RedisSearch module pre-loaded…   56
redislabs/rejson                    RedisJSON - Enhanced JSON data type processi…   51
redislabs/redis                     Clustered in-memory database engine compatib…   36
redis/redis-stack                   redis-stack installs a Redis server with add…   31
redislabs/redismod                  An automated build of redismod - latest Redi…   31                   [OK]
redislabs/redisgraph                A graph database module for Redis               25                   [OK]
redislabs/rebloom                   A probablistic datatypes module for Redis       21                   [OK]
redis/redis-stack-server            redis-stack-server installs a Redis server w…   14
redislabs/redistimeseries           A time series database module for Redis         12
redislabs/operator                                                                  7
redislabs/redis-py                                                                  5
redislabs/redisai                                                                   4
redislabs/redisgears                An automated build of RedisGears                4
redislabs/redis-webcli              A tiny Flask app to provide access to Redis …   3                    [OK]
redislabs/redisml                   A Redis module that implements several machi…   2                    [OK]
redislabs/k8s-controller                                                            2
redislabs/operator-internal         This repository contains pre-released versio…   1
redislabs/memtier_benchmark         Docker image to run memtier_benchmark           0
redislabs/k8s-controller-internal                                                   0
redislabs/olmtest                   Test artefact for OLM CSV                       0
redislabs/olm-bundle                                                                0
redislabs/ng-redis-raft             Redis with redis raft module                    0
  • NAME:镜像名称

  • DESCRIPTION:镜像的简单描述

  • STARS:星数,类似于GitHub

  • OFFICIAL:镜像是否为官方

  • AUTOMATED:镜像是否由dockerhub自动构建流程创建

4.2.3拉取镜像

#不加版本默认为最新版本
[root@VM-12-4-centos ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
025c56f98b67: Pull complete
ec0f5d052824: Pull complete
cc9fb8360807: Pull complete
defc9ba04d7c: Pull complete
885556963dad: Pull complete
f12443e5c9f7: Pull complete
Digest: sha256:ff5d8d8389474b6ad895ec6089e926711ce2af5939860488938f394298eedea9
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@VM-12-4-centos ~]# docker images
REPOSITORY   TAG          IMAGE ID       CREATED       SIZE
rabbitmq     management   c8a49f166d2d   6 days ago    257MB
nginx        latest       3964ce7b8458   7 days ago    142MB

4.2.4删除镜像

#一般后面跟镜像id或镜像名
[root@VM-12-4-centos ~]# docker rmi nginx
Untagged: nginx:latest
Untagged: nginx@sha256:ff5d8d8389474b6ad895ec6089e926711ce2af5939860488938f394298eedea9
Deleted: sha256:3964ce7b84589cf9bc585415741b642b7167229e0afde03f502f6c848ed3279d
Deleted: sha256:d074856927ea4224de9fa86b95620c7e4a26da5512db98ccd50cd31b972679a3
Deleted: sha256:815f0d9df09812d9a61725d270fc09f565ab24af22acbda11a953ac9740bb920
Deleted: sha256:dd1c6be5fb8e83f9dc81c628a614dee835cd881c1e244f7f893f2acc49c4fd3b
Deleted: sha256:1d76f7083f6e373335df2263cbd7e272c53df65f226bedbf4849149dddbfd9d7
Deleted: sha256:f95e777ae8eeb4c90475fda98d997771924baaf2975f406d62fa92a1a5b4e502
Deleted: sha256:b5ebffba54d3e3f7fd80435fcdc34c4a96fdb2ecab0f0a298fe08f74c2f69d29
[root@VM-12-4-centos ~]# docker images
REPOSITORY   TAG          IMAGE ID       CREATED       SIZE
rabbitmq     management   c8a49f166d2d   6 days ago    257MB
mysql        8.0          7484689f290f   2 weeks ago   538MB

删除所有镜像时可使用:

 docker rmi $(docker images -q)

4.2.5镜像其他操作

$ docker load < ubuntu.tar.gz   镜像恢复与迁移
$ docker load -i ubuntu.tar 镜像恢复与迁移
$ docker save busybox > ubuntu.tar  镜像备份
$ docker history    显示镜像的历史
$ docker commit nginx mynginx   将容器另存为镜像。
$ docker tag nginx eon01/nginx  标记镜像

构建镜像时可使用:

$ docker build .
$ docker build github.com/creack/docker-firefox
$ docker build - < Dockerfile
$ docker build - < context.tar.gz
$ docker build -t eon/nginx-server .
$ docker build -f myOtherDockerfile .
$ curl example.com/remote/Dockerfile | docker build -f - 

4.3容器与镜像的批操作

docker stop $(docker ps -a -q)  #停止所有容器
docker rm -f $(docker ps -a -q) #删除所有容器
docker rmi -f $(docker images -q)   #删除所有镜像

五,Dockerfile梳理

5.1基本概念

Dockerfile 是由一系列命令和参数构成的脚本,这些命令应用与基础镜像(操作级别的镜像,比如:centos镜像)并最终创建一个新的镜像

  • 对于开发人员:可以为开发团队提供一个完全一致的开发环境

  • 对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作

  • 对于运维人员:在部署时,可以实现应用的无缝移植

5.2常用命令

命令 作用
FROM image_name 定义了使用哪个基础镜像启动构建流程(基础镜像要存在,若不存在,会优先pull基础镜像)
MAINTAINER user_name 声明镜像的创建者(非必须)
ENV key value 设置环境变量(可以写多条)
RUN command 是 Dockerfile 的核心部分(可以写多条)
Add source_dir / file dest_dir / file 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压
COPY source_dir / file dest_dir / file 和 ADD 相似,但是如果有压缩文件不进行解压
WORKDIR path_dir 设置工作目录

5.3DockerFile部署一个简单的SpringBoot项目

5.3.1整合后端成jar包并编写Dockerfile文件

#基础镜像使用的jdk版本
FROM openjdk:8
#作者
MAINTAINER young
#将所有的jar包整合为app.jar
COPY *.jar /app.jar
#指定容器启动时运行的命令
CMD ["--server.port=8090"]
#暴露后端后口号
EXPOSE 8090
#执行jar包
ENTRYPOINT ["java","-jar","/app.jar"]

5.3.2将jar包与Dockerfile文件上传至Liunx服务器

需要将这两个文件放在同级目录内

[root@VM-12-4-centos demo]# ll
total 36732
-rw-r--r-- 1 root root      289 Dec 21 16:24 Dockerfile
-rwxr-xr-x 1 root root 37605420 Dec 21 16:15 music-0.0.1-SNAPSHOT.jar

5.3.3构建镜像

#注意后面有一个点.别漏了
[root@VM-12-4-centos demo]# docker build -t mymusic .
Sending build context to Docker daemon  37.61MB
Step 1/6 : FROM openjdk:8
8: Pulling from library/openjdk
001c52e26ad5: Pull complete
d9d4b9b6e964: Pull complete
2068746827ec: Pull complete
9daef329d350: Pull complete
d85151f15b66: Pull complete
52a8c426d30b: Pull complete
8754a66e0050: Pull complete
Digest: sha256:86e863cc57215cfb181bd319736d0baf625fe8f150577f9eb58bd937f5452cb8
Status: Downloaded newer image for openjdk:8---> b273004037cc
Step 2/6 : MAINTAINER young---> Running in 3b03b6bb6c08
Removing intermediate container 3b03b6bb6c08---> 0a8b8a80fa61
Step 3/6 : COPY *.jar /app.jar---> 82a2213af05a
Step 4/6 : CMD ["--server.port=8081"]---> Running in f51e7740441c
Removing intermediate container f51e7740441c---> d9ce2e68fa52
Step 5/6 : EXPOSE 8081---> Running in 5adcecedba6e
Removing intermediate container 5adcecedba6e---> 01e09c92c563
Step 6/6 : ENTRYPOINT ["java","-jar","/app.jar"]---> Running in b5c259a237aa
Removing intermediate container b5c259a237aa---> 46adc3611f00
Successfully built 46adc3611f00
Successfully tagged mymusic:latest

这样我们后端项目就被构建成一个镜像了。

通过命令查看就能发现我们项目的镜像存在了。

[root@VM-12-4-centos demo]# docker images
REPOSITORY   TAG          IMAGE ID       CREATED              SIZE
mymusic      latest       01eaf28f9fc7   About a minute ago   564MB
rabbitmq     management   c8a49f166d2d   6 days ago           257MB
mysql        8.0          7484689f290f   2 weeks ago          538MB
openjdk      8            b273004037cc   4 months ago         526MB

5.3.4创建运行容器并测试接口

[root@VM-12-4-centos demo]# docker run -d -p 8081:8081 --name mymusic1 mymusic
e6dcb57d899243795ea76ac9149b2a6a0f46a7a8378480d46f8b69ccb4fbdcdd
[root@VM-12-4-centos demo]# docker ps -s
CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS         PORTS                                                                                                                                                 NAMES      SIZE
e6dcb57d8992   mymusic               "java -jar /app.jar …"   10 seconds ago   Up 5 seconds   0.0.0.0:8081->8081/tcp, :::8081->8081/tcp                                                                                                             mymusic1   32.8kB (virtual 564MB)
a6f28deb93ee   rabbitmq:management   "docker-entrypoint.s…"   5 days ago       Up 5 days      4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, :::5672->5672/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp, :::15672->15672/tcp   rabbit1    0B (virtual 257MB)

这样我们容器就顺利启动了,接下来可以测试一下我们后端接口。

[root@VM-12-4-centos data]# curl http://localhost:8081/singer
[{"id":1,"name":"张杰","sex":1,"pic":"/img/singerPic/zhangjie.jpg","birth":"1982-12-21 02:50:07","location":"中国四川","introduction":"华语歌坛新生代领军人物,偶像与实力兼具的超人气天王。2004年出道至今,已发行9张高品质唱片,唱片销量称冠内地群雄。2008年以来举办过9场爆满的个人演唱会,在各大权威音乐奖项中先后21次获得“最受欢迎男歌手”称号,2012年度中国TOP排行榜内地最佳男歌手,2010年在韩国M-net亚洲音乐大赏(MAMA)上获得“亚洲之星”(Best Asian Artist)大奖,影响力触及海外。"},{"id":2,"name":"周杰伦","sex":1,"pic":"/img/singerPic/zhoujielun.jpg","birth":"1979-01-09 01:29:15","location":"中国台湾","introduction":"著名歌手,音乐人,词曲创作人,编曲及制作人,MV及电影导演。新世纪华语歌坛领军人物,中国风歌曲始祖,被时代周刊誉为“亚洲猫王”,是2000年后亚洲流行乐坛最具革命性与指标性的创作歌手,亚洲销量超过3100万张……

可以看到接口测试正常。

六,Docker私有仓库搭建与配置

6.1拉取私有仓库镜像

[root@VM-12-4-centos data]# docker pull registry
Using default tag: latest
latest: Pulling from library/registry
ca7dd9ec2225: Pull complete
c41ae7ad2b39: Pull complete
1ed0fc8a6161: Pull complete
21df229223d2: Pull complete
626897ccab21: Pull complete
Digest: sha256:ce14a6258f37702ff3cd92232a6f5b81ace542d9f1631966999e9f7c1ee6ddba
Status: Downloaded newer image for registry:latest
docker.io/library/registry:latest
[root@VM-12-4-centos data]# docker images
REPOSITORY   TAG          IMAGE ID       CREATED        SIZE
mymusic      latest       2f0a4e6e04d7   2 hours ago    564MB
rabbitmq     management   c8a49f166d2d   6 days ago     257MB
mysql        8.0          7484689f290f   2 weeks ago    538MB
registry     latest       81c944c2288b   5 weeks ago    24.1MB
openjdk      8            b273004037cc   4 months ago   526MB

6.2启动私有仓库容器

[root@VM-12-4-centos data]# docker run -id --name registry -p 5000:5000 registry
db84693c0bd7e2adde2b26bb09664ae971c567a53e01beab583f0613d16ee1e9
[root@VM-12-4-centos data]# docker ps -s
CONTAINER ID   IMAGE                 COMMAND                  CREATED         STATUS         PORTS                                                                                                                                                 NAMES      SIZE
db84693c0bd7   registry              "/entrypoint.sh /etc…"   5 seconds ago   Up 4 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp                                                                                                             registry   0B (virtual 24.1MB)
a6f28deb93ee   rabbitmq:management   "docker-entrypoint.s…"   6 days ago      Up 6 days      4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, :::5672->5672/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp, :::15672->15672/tcp   rabbit1    0B (virtual 257MB)

6.3查看搭建情况

[root@VM-12-4-centos data]# curl -X GET http://localhost:5000/v2/_catalog
{"repositories":[]}

记得开放防火墙端口,然后可以看到此时私有仓库已经搭建成功,并且没有内容。

6.4修改配置

修改daemin.json文件,让docker信任我们的私有仓库

 { "storage-driver": "devicemapper" ,
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
"insecure-registries": ["1:5000"]}
~  

然后重启docker服务,重新运行registry容器即可。

[root@VM-12-4-centos data]# systemctl restart docker
[root@VM-12-4-centos data]# docker start registry
registry
[root@VM-12-4-centos data]# docker ps -s
CONTAINER ID   IMAGE      COMMAND                  CREATED          STATUS         PORTS                                       NAMES      SIZE
db84693c0bd7   registry   "/entrypoint.sh /etc…"   14 minutes ago   Up 4 seconds   0.0.0.0:5000->5000/tcp, :::5000->5000/tcp   registry   0B (virtual 24.1MB)

6.5Docker私有仓库镜像上传

这里我们对之前的SpringBoot项目的景象进行上传。

标记我们之前的项目的镜像为私有仓库的镜像。

[root@VM-12-4-centos data]# docker tag mymusic 192.168.98.128:5000/mymusic
[root@VM-12-4-centos data]# docker images
REPOSITORY                   TAG          IMAGE ID       CREATED        SIZE
192.168.98.128:5000/mymusic   latest       2f0a4e6e04d7   2 hours ago    564MB
mymusic                      latest       2f0a4e6e04d7   2 hours ago    564MB
rabbitmq                     management   c8a49f166d2d   6 days ago     257MB
mysql                        8.0          7484689f290f   2 weeks ago    538MB
registry                     latest       81c944c2288b   5 weeks ago    24.1MB
openjdk                      8            b273004037cc   4 months ago   526MB

注意需将镜像名称重命名为:仓库ip+端口+镜像名称的形式。否则会push仓库不成功.

然后将标记后的镜像push到我们的私有仓库。

[root@VM-12-4-centos data]# docker push 43.142.85.155:5000/mymusic
Using default tag: latest
The push refers to repository [43.142.85.155:5000/mymusic]
22d537790a70:Pushed
cbdcc39a568b:Pushed
174f56854903: Pushed
latest:digest:sha256:0028c43cc9e8400bc4e7fbddc378b741516718ad8b72a12de0c4f38f107d0acb
size:949

搞定,然后重新刷新一下私有仓库地址,就可以看到镜像已经成功上传。

[root@VM-12-4-centos data]# curl -X GET http://localhost:5000/v2/_catalog
{"repositories":["mymusic"]}

七,其他一些总结

7.1Docker网络相关

#删除网络
docker network rm MyOverlayNetwork
​
#列出网络
docker network ls
​
#获取有关网络的信息
docker network inspect MyOverlayNetwork
​
#将正在运行的容器连接到网络
docker network connect MyOverlayNetwork nginx
​
#启动时将容器连接到网络
docker run -it -d --network=MyOverlayNetwork nginx
​
#断开容器与网络的连接
docker network disconnect MyOverlayNetwork nginx

7.2DockerHub相关

docker search search_word   #在 docker hub 中搜索镜像。
docker pull user/image  #从 docker hub 下载镜像。
docker login    #向 docker hub 进行身份验证
docker push user/image  #将镜像上传到 docker hub。

7.3Docker Compose相关

docker-compose up   #创建和启动容器
docker-compose up -d    #以分离模式创建和启动容器
docker-compose down #停止和删除容器、网络、映像和卷
docker-compose logs #查看容器的输出
docker-compose restart  #重启所有服务
docker-compose pull #拉取所有服务的镜像
docker-compose build    #构建所有服务的镜像
docker-compose config   #验证并查看 Compose 文件
docker-compose scale <service_name>=<replica>   #为服务指定容器个数
docker-compose top  #显示正在运行的进程
docker-compose run -rm -p 2022:22 web bash  #启动 Web 服务并运行 bash 作为其命令,删除旧容器。

7.4Docker Services相关

docker service create <options> <image> <command>   #创建新服务
docker service inspect --pretty <service_name>  #显示详细信息服务
docker service ls   #列出服务
docker service ps   #列出服务的任务
docker service scale <service_name>=<replica>   #规模特殊服务
docker service update <options> <service_name>  #更新服务选项

7.5Docker Stack相关

docker stack ls #列出此 Docker 主机上所有正在运行的应用程序
docker stack deploy -c <composefile> <appname>  #运行指定的 Compose 文件
docker stack services <appname> #列出与应用关联的服务
docker stack ps <appname>   #列出与应用关联的正在运行的容器
docker stack rm <appname>   #拆掉一个应用程序

7.6Docker Machine相关

docker-machine create --driver virtualbox myvm1 #创建虚拟机(Mac、Win7、Linux)
docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" myvm1    Win10
docker-machine env myvm1    #查看有关您的节点的基本信息
docker-machine ssh myvm1 "docker node ls"   #列出集群中的节点
docker-machine ssh myvm1 "docker node inspect <node ID>"    #检查节点
docker-machine ssh myvm1 "docker swarm join-token -q worker"    #查看加入令牌
docker-machine ssh myvm1    #打开与 VM 的 SSH 会话; 输入“exit”结束
docker-machine ssh myvm2 "docker swarm leave"   #让工人离开群体
docker-machine ssh myvm1 "docker swarm leave -f"    #让主人离开,杀群
docker-machine start myvm1  #启动当前未运行的 VM
docker-machine stop $(docker-machine ls -q) #停止所有正在运行的虚拟机
docker-machine rm $(docker-machine ls -q)   #删除所有虚拟机及其磁盘映像
docker-machine scp docker-compose.yml myvm1:~   #将文件复制到节点的主目录
docker-machine ssh myvm1 "docker stack deploy -c <file> <app>"  #部署应用

更多Docker命令使用可以自行参考Docker命令使用清单

看到最后的小伙伴觉得不错的话欢迎点赞、收藏哈~

Docker基础与进阶梳理(干货满满)相关推荐

  1. Docker基础、进阶笔记,为k8s的学习预预热

    标题 Docker基础.进阶笔记,为k8s的学习预预热 笔记来源于视频: 狂神docker基础篇 狂神docker进阶篇 笔记中图片有些取自于:这位博主的两篇docker笔记中的一些图片 百度云笔记工 ...

  2. 微生物基础实验操作参考手册,微生物科研人必看!干货满满

    关注"微生态"公众号,了解更多微生科研干货 生科云网址:https://www.bioincloud.tech 微科盟此次为广大微生态科研工作者分享微生物基础实验操作参考手册,该手 ...

  3. 教你如何零基础学习视频剪辑,干货满满

    5000字长文预警!!! 软件推荐+专业术语解析+视频素材网站分享 教你如何零基础学习视频剪辑,干货满满 那么在推荐视频剪辑软件之前,首先你应该明确自己的制作视频的目的. 是想成为专业剪辑师,从事专业 ...

  4. linux运维基础进阶和shell入门,Linux运维工程师从基础到进阶:Shell变量知识梳理...

    原标题:Linux运维工程师从基础到进阶:Shell变量知识梳理 Shell是一个用C语言编写的程序,它是用户使用Linux的桥梁.Shell既是一种命令语言,又是一种程序设计语言,涵盖的知识点多且杂 ...

  5. 干货满满 | 100 个网络基础知识

    干货满满 | 100 个网络基础知识 1)什么是链接? 链接是指两个设备之间的连接.它包括用于一个设备能够与另一个设备通信的电缆类型和协议. 2)OSI 参考模型的层次是什么? 有 7 个 OSI 层 ...

  6. 转载 --史上最全数学符号、公式的英文读法,干货满满!

    在学习数学符号读法时,搜到这篇文章,非常全面,也很风趣,忍不住转载过来,若有不妥, 请联系我. [收藏]史上最全数学符号.公式的英文读法,干货满满! 2018-01-04 11:00 英语 说起英语和 ...

  7. 史上最全的前端学习路线图,干货满满

    史上最全的前端学习路线图,干货满满 前端很火,想自学前端的人也多.作为过来人,知道自学的辛苦.所以小编精心制作这份学习路线图,就是让想自学前端的小伙伴们有一份系统专业的学习资源和学习指导. 此学习路线 ...

  8. Yann Lecun纽约大学《深度学习》2020课程笔记中文版,干货满满!

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [导读]Yann Lecun在纽约大学开设的2020春季<深度学习>课 ...

  9. 你可能不知道的Python面试秘籍 干货满满(附带参考答案)上篇

    Q1.Python中的列表和元组有什么区别? 你可能不知道的Python面试秘籍 干货满满(附带参考答案)上篇 Q2.Python的主要功能是什么? Python是一种解释型语言.与C语言等语言不同, ...

最新文章

  1. 四则运算 3.0 结对
  2. python 下载大文件
  3. vc6.0报delete and rebuild Error executing link.exe.错误
  4. 又想到了模板引擎和前端MVVM框架
  5. 常见数控机床的数据采集方法比较
  6. POJ - 2348 Euclid's Game(博弈)
  7. 解决stackoverflow打开慢不能注册登录
  8. idea快捷键之记录
  9. oracle awr报告生成_分享AWR报告的生成和简单分析方法
  10. 项目管理平台(总结篇二)
  11. gpio 树莓派3a+_树莓派4正式发布:35美元起售!真香
  12. iframe:获取iframe中的元素
  13. Java的API帮助文档
  14. 电容式触摸感应按键解决方案AD
  15. Cannot negotiate authentication mechanism svn: Unable to connect to a repository at URL 'svn://gite
  16. 计算机启动到安全模式 黑屏,电脑开机到一半就黑屏,显示器显示无信号,安全模式可以进去...
  17. IntelliJ IDEA 在方法大括号中{}点击回车多出一个},如何取消
  18. 红绿灯(交通信号灯)检测数据集
  19. String...的用法
  20. UIColor的RGB定义颜色(灰色)

热门文章

  1. UltraEdit 脚本命令
  2. 省常中模拟 day1
  3. 对于运维工程师岗位职责有哪些
  4. 1367: 青蛙爬井
  5. 小如雪花的微尘计算机阅读答案,《有趣的“三”》阅读答案
  6. 百魂战记服务器维护了多久,为什么百魂战记进不去,百魂战记怎么注册不了
  7. mysql锁与程序锁_「最美应用」应用锁:这个程序锁,不寻常...
  8. Photoshop 2022版
  9. 2017春3月江苏省c语言上机,2012春江苏省高校计算机等级考试二级c语言上机题(c01)及其解答张柏雄...
  10. 少爷,三年期限已到,不知Redis学的如何?