容器化技术-Docker

这篇具有很好参考价值的文章主要介绍了容器化技术-Docker。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

容器技术,Docker,docker,运维,容器

一、引言


1.1 什么是Docker(重要 - 部署)?

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

1.2 容器的特性

容器技术又称为容器虚拟化,是一种操作系统虚拟化,属于轻量级虚拟化
容器首先是一个相对独立的运行环境,并且在一个容器环境中,应该最小化对外界的影响,比如不能在容器中把宿主机上的资源全部消耗完,这就是资源控制。

1.3 为什么需要Docker?

1.3.1 思考

在开发中我们经常会遇到这样的问题,我的代码在本地是好好的,为什么放到其他机器上就跑不起来了呢?

1.3.2 原因

这时候就牵扯到了另一个因素环境。我们的开发环境受制很多因素,比如我用win或者mac os开发的,但是部署到了centos上面了,造成的环境影响。还有配置、版本等等一系列的问题。

1.3.3 方案

因为环境的不同,当运维拿到我们的代码的时候就会很头疼。所以急切的希望出现一种技术来统一这些环境。你开发就不要只提交代码给我了,把你的代码连着你的开发环境直接打包丢给我吧。或者说我来弄一套环境,你在我这上面开发。所以这时候docker就出现了,来解决我们这些一套环境的问题

1.4 容器 VS 虚拟机

1.4.1 虚拟机

1)虚拟机是用来进行硬件资源划分的完美解决方案,利用的是硬件虚拟化技术,如此VT-x 、AMD-V会通过一个 hypervisor 层来实现对资源的彻底隔离。
2)虚拟机会独占分配给自己的资源,不存在资源共享,各个虚拟机之间近乎完全隔离,更加重量级,也会消耗更多的资源。

虚拟机结构图

容器技术,Docker,docker,运维,容器

1.4.2 容器

1)容器则是操作系统级别的虚拟化,仅仅是进程本身就可以实现互相隔离,不需要任何辅助。
2)Docker 容器与主机共享操作系统内核,不同的容器之间可以共享部分系统资源,因此更加轻量级,消耗的资源更少。

容器结构图

容器技术,Docker,docker,运维,容器

1.5 Docker架构图

Docker架构图

容器技术,Docker,docker,运维,容器

1.5.1 仓库

Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。

1.5.2 镜像

Docker 镜像是用于创建 Docker 容器的模板,类似于Java中的概念。

1.5.3 容器

是独立运行的一个或一组应用。通过镜像创建生成,类似于Java中的对象概念。

二、Docker的安装


2.1 Docker的发行版

自2017年3月份 Docker 公司把 Docker 划分为了
社区版: Docker Community Edition(CE) 为社区版, 免费。
企业版: Docker Enterprise Edition(EE) 为企业版, 收费。支持安全扫描,LDAP集成,内容签名,多云支持等

2.2 Docker支持的操作系统

Docker最初依赖于linux kernel的一些功能,所以最开始只能在linux系统下运行,常用发行版本,CentOS, Ubuntu, Suse,Federa都是支持。
2015年微软在windows server 2016下实现了Docker,因此也能在windows下运行。

2.3 在CentOS上安装Docker(CentOS版本必须7+)

2.3.1 安装前置环境

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

2.3.2 设置docker-ce版安装源

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

2.3.3 安装docker

yum -y install docker-ce

2.3.4 启动/停止docker

systemctl start/stop docker

2.3.5 基于阿里云配置镜像加速

登录网址: 开放云原生应用-云原生(Cloud Native)-云原生介绍 - 阿里云

需要注册个账号后登录上去,点击“管理中心”

容器技术,Docker,docker,运维,容器

选择“镜像加速器”

容器技术,Docker,docker,运维,容器

按照官方的操作文档修改配置文件即可
注意:如果/etc/docker/daemon.json文件不存在,创建一个即可

容器技术,Docker,docker,运维,容器

2.3.6 重启docker服务

systemctl restart docker

2.3.7 测试docker服务

docker run hello-world

测试结果

容器技术,Docker,docker,运维,容器

三、Docker的基本命令

3.1 镜像相关的命令

3.1.1 搜索镜像

docker search [镜像名称]

参数介绍:

-f, --filter 根据提供的条件过滤器输出
--format 用Go模板打印出漂亮的搜索结果
--limit [n] 搜索结果的最大数量(默认值为25)
--no-trunc 不要截断输出

3.1.2 拉取镜像(从仓库中下载镜像到本地)

docker pull [镜像名称][:标签]

注意:

拉取镜像时如果没有显示的指定tag标签,默认会拉取latest标签的版本镜像

3.1.3 查看本地镜像

docker images

参数介绍:

-q 只显示镜像唯一的标识信息

3.1.4 删除镜像

docker rmi [镜像名称:tag]/[镜像ID]

参数介绍:

-f 强制删除镜像
后面所有用到名称:tag的地方都可以用id代替,反过来也一样

3.2 容器相关的命令

3.2.1 根据镜像运行容器

docker run [镜像名称][:tag]

docker run -d --name mytomcat -p 8888:8080 --restart always tomcat:8

参数介绍:

-i 保持和 docker 容器内的交互
-t 为容器的标准输入,虚拟一个tty
-d 后台运行容器
--rm 容器在启动后,执行完成命令或程序后就销毁(不可于 -d 一起使用)
--name 给容器起一个自定义名称
--restart docker 1.12 新增加的参数,用来指定容器的重启策略, 当前提供的策略包括:

  • no 默认值,如果容器挂掉不自动重启。
  • on-failure,若容器的退出状态非0,则docker自动重启容器,还可以指定重启次数
  • always,只要容器退出,则docker将自动重启容器

-p 将宿主机中的某个端口映射到容器中的某个端口上

-e 动态设置容器的运行环境变量
注意:如果run的镜像在本地不存在,就会自动的进行拉取

3.2.2 查看容器

docker ps

参数介绍:

-a 查看所有容器(默认不查询停止的容器)
-q 只查询容器的id

3.2.3 容器启动/停止/重启

docker start/stop/restart 容器名称

3.2.4 查看容器的元数据(容器的详细信息)

docker inspect 容器名称

3.2.5 删除容器

docker rm 容器名称

删除所有容器
docker rm $(docker ps -aq)

参数介绍:

-f 表示强制删除一个容器(默认不能删除一个运行中的容器)

3.2.6 进入容器中

docker exec [option] 容器名称 [args]

参数介绍:

-i 保持和 docker 容器内的交互
-t 为容器的标准输入,虚拟一个tty
-w 指定进入容器后的工作路径
args:表示进入容器后执行的命令,如果需要和容器进行交互式访问,需要配置参数为-it,并且命令设置为bash(表示通过命令行的方式交互访问容器)

注意:

该命令只能进入到运行中的容器

3.2.7 查看容器运行日志

docker logs 容器名称

参数介绍:

--tail n 选项可以指定查看最后n条日志
-t 选项则可以对日志条目附加时间戳。
--until 显示在某个时间戳(例如:2018-05-25T 13:23:37)之前的日志,还可以相对时间(例如:42m 42 minutes)
-f 实时打印日志内容

3.2.7 宿主机和容器间的数据拷贝

docker cp [OPTIONS] 容器名称:容器内路径 宿主机路径 
docker cp [OPTIONS] 宿主机路径 容器名称:容器内路径

注意:
1、复制文件夹不需要添加任何参数(和Linux的命令有区别)
2、无论需要从哪儿拷贝到哪里,命令都是在宿主机执行

四、容器数据卷

4.1 什么是容器数据卷?

数据卷存在于宿主机中,独立于容器,和容器的生命周期是分离的
数据卷可以是目录也可以是文件
容器可以利用数据卷与宿主机进行数据共享,实现了容器间的数据共享和交换

4.2 容器数据卷的特点

1、容器启动时初始化数据卷,如果容器使用的镜像包含了数据,这些数据也会拷贝到数据卷中
2、对 数据卷 的修改会立马生效
3、数据卷的变化不会影响镜像的更新
4、数据卷是宿主机中的一个目录

4.3 数据卷的运用场景

1、在多个运行容器之间共享数据。如果您没有明确创建它,则会在第一次将其装入容器时创建卷。当该容器停止或被移除时,该卷仍然存在。多个容器可以同时安装相同的卷,无论是读写还是只读。仅当您明确删除卷时才会删除卷
2、当您想要将容器的数据存储在远程主机或云提供商上而不是本地时
3、当您需要备份,还原或将数据从一台Docker主机迁移到另一台时,卷是更好的选择。您可以停止容器,然后备份卷的目录

4.4 数据卷的相关命令

4.4.1 创建容器数据卷

docker volume create 数据卷名称

//查看创建的数据卷
docker volume list

注意

容器卷默认保存在宿主机的/var/lib/docker/volumes路径下

4.4.2 创建容器时指定数据卷

docker run -it 
	--mount source=数据卷名称,target=容器中的挂载路径,type=volume 
	--name 容器别名 镜像名称

参数介绍:

source 指定宿主机中数据卷的名称
target 指定容器中对应的挂载路径
type 指定为数据卷的方式挂载,还可以选择bind、tmpfs,默认为volume

注意:

1、如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中
2、如果挂载一个非空的数据卷到容器中的一个目录中,那么容器中的目录中会显示数据卷中的数据。如果原来容器中的目录中有数据,那么这些原始数据会被隐藏掉

4.4.3 直接在创建容器时指定数据卷

docker run  ... [-v 宿主机数据卷:docker容器路径:ro] []...

// 删除所有没用的数据卷
docker volume prune

注意:

1、通过这种方式可以任意指定宿主机的数据卷位置
2、如果随意指定数据卷的位置,容器中对应路径的文件就不会复制到宿主机的数据卷中,而是全部被清空
3、:ro表示以只读的方式挂载容器卷,不写再表示以读写的方式挂载
4、可以通过-v连续设置多个容器卷路径

总结:
数据卷未显示声明路径(默认在/var/lib/docker/volumes下)

1、数据卷为空,对应的容器路径有数据,则容器中的数据直接同步到数据卷中
2、数据卷有数据,对应的容器路径不存在,则启动容器时,自动创建该容器路径,并且将数据卷的数据同步到该路径下
3、数据卷有数据,对应的容器路径也有数据(数据不同),会把数据卷中的数据同步到容器路径中,容器路径中的文件会被隐藏(宿主机 覆盖 容器)
如果宿主机的数据卷为空,容器覆盖宿主机,如果数据卷不为空,则宿主机覆盖容器

数据卷声明指定路径

1、数据卷为空,对应的容器路径有数据,则直接将容器路径中的数据隐藏
2、数据卷有数据,对应的容器路径不存在,则启动容器时,自动创建该容器路径,并且将数据卷的数据同步到该路径下
3、数据卷有数据,对应的容器路径也有数据(数据不同),会把数据卷中的数据同步到容器路径中,容器路径中的文件会被隐藏(宿主机 覆盖 容器)
无论情况如何,永远是宿主机 覆盖 容器路径

数据卷是文件的情况

1、数据卷指定一个文件,对应的容器文件不存在,直接将数据卷文件覆盖到容器中
2、数据卷指定的文件不存在,容器的文件存在,启动容器会报错
如果需要绑定文件,则必须保证宿主机的数据卷中文件必须存在

五、Docker的应用

5.1 使用docker安装MySQL

5.1.1 拉取mysql的镜像

docker pull mysql:5.7

5.1.2 根据镜像创建容器

docker run -d 
    -v ~/mysql/conf:/etc/mysql/conf.d //2
	-v ~/mysql/logs:/logs //3
	-v ~/mysql/data:/var/lib/mysql //4
	-p 3306:3306 //5
	-e MYSQL_ROOT_PASSWORD='root' //6
	--name mysql
	mysql:5.7
docker run -d -v ~/mysql/conf:/etc/mysql/conf.d -v ~/mysql/logs:/logs -v ~/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD='root' --name mysql --restart always mysql:5.7

代码解释

第二行:挂载mysql配置文件到宿主机
第三行:挂载mysql日志文件到宿主机
第四行:挂载mysql的数据路径到宿主机
第五行:将容器中3306端口映射到宿主机的3306端口上
第六方:设置MySQL的root账号密码为root

设置数据库编码

进入~/mysql/confg中,创建一个文件my.cnf,填写如下内容:
[mysqld]
character-set-server=utf8
重启mysql容器

5.2 使用docker安装tomcat

5.2.1 拉取tomcat的镜像

docker pull tomcat:8

5.2.2 运行tomcat容器

docker run -d 
	--name tomcat 
	-p 8080:8080 
	-v ~/tomcat/webapps:/usr/local/tomcat/webapps  
	tomcat:8

5.2.3 进入容器中进行相关拷贝

docker exec -it tomcat bash
cp -r webapps.dist/* webapps

注意:

docker镜像tomcat8之后容器中webapps中没有任何内容,需要将欢迎页导入

5.2.4 将自定义工程部署到tomcat中

1、使用maven命令或者工具将自定义工程打包
2、到工程的target目录下找到打的war包
3、将war包拷贝到宿主机的tomcat数据卷中
4、重启tomcat容器 docker restart tomcat

六、Docker镜像的制作与管理

6.1 什么是Dockerfile?

Dockerfile简单来说就是docker镜像的描述文件,最基础原始的镜像文件都是通过dockerfile文件构建而来

6.2 Dockerfile模板指令介绍

FROM:指定基础镜像,必备的指令,并且必须是第一条指令。
MAINTAINER:指明该镜像的维护者和点子邮件。
比如:MAINTAINER xxxx "xxxxx@qq.com"
ENV:设置环境变量。
比如:EVN key1=value1 key2=value2...
RUN:在新镜像内部执行的命令,比如安装一些软件、配置一些基础环境,可使用\来换行。
比如:RUN yum install -y mysql-server
COPY:将主机的文件复制到镜像文件中,如果目标位置不存在会自动创建。
比如:COPY application.yml /etc/resources
ADD:和COPY一样,但是ADD会加上解压操作
EXPOSE:暴露镜像的端口供主机做映射,可以暴露多个端口。
比如:EXPOSE 8080
WORKDIR:在构建镜像时,指定镜像的工作目录,之后的命令都是基于此工作目录,如果不存在,则会创建目录,而且在进入容器时,会默认定位到该路径下。
比如:WORKDIR /usr/local
VOLUME:用来向基础镜像中添加数据卷
比如 VOLUME /root/mydata /root/condata
CMD:容器启动时需要执行的命令。(通常是前台指令)
比如 CMD /bin/bash

容器技术,Docker,docker,运维,容器

6.3 案例:使用Dockerfile构建自定义工程的运行镜像

6.3.1 准备好Dockerfile文件以及需要部署的工程war包

制作镜像1

容器技术,Docker,docker,运维,容器

6.3.2 Dockerfile文件内容

FROM tomcat:8 
WORKDIR /usr/local/tomcat
COPY test.war ./webapps
EXPOSE 8080 
RUN ./bin/startup.sh

解释:

第一行:该镜像时基于tomcat:8镜像构建
第二行:设置当前基础路径,也是后续命令的相对路径
第三行:将工程war包复制到tomcat的webapps路径下
第四方:对外暴露8080端口,也就是tomcat访问路径
第五行:设置容器启动时命令,即启动tomcat

6.3.3 通过Dockerfile构建镜像

执行命令

docker build -f ./Dockerfile -t mytest:v1 .

解释:

-f 用来指定Dockerfile模板文件
-t 用来指定自定义镜像的名称以及tag
最后的.表示当前路径

6.4 将自定义镜像推送至镜像中心(私服、阿里云等,这里以阿里云举例)

登录阿里云,并且选择容器镜像服务
创建容器仓库
登录阿里云的仓库并且通过命令推送镜像到阿里云

docker login --username=账号 registry.cn-hangzhou.aliyuncs.com
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/ken-hub/myhub:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/ken-hub/myhub:[镜像版本号]

七、Docker-Compose

7.1 什么是Docker-compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务

7.2 Docker-Compose安装

前置条件:安装好Docker
下载docker-compose二进制文件到服务器指定目录

curl -L https://github.com/docker/compose/releases/download/1.24.0/docker_x0002_compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

执行授权操作

chmod +x /usr/local/bin/docker-compose

测试

docker-compose version

7.3 Docker-Compose模板文件

7.3.1 什么是模板文件?

模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多。但是这里面大部分指令跟 docker run 相关参数的含义都是类似的。
默认的模板文件名称为 docker-compose.yml ,格式为 YAML 格式。

7.3.2 docker-compose模板基本格式案例

version: "3.1" 
services: 
    webapp:
        image: examples/web
        ports:
            - 80:80
        volumes:
            - /data
version: "3.1"
#管理各种容器
services:
  #管理tomcat容器
  tomcat:
    image: tomcat:8
    ports:
      - 8888:8080
    container_name: mytomcat
    restart: always
  #管理mysql容器 - 这个地方的名字可以瞎写
  mysql:
    image: mysql:5.7
    ports:
      - 3306:3306
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - ./mysql/conf:/etc/mysql/conf.d
      - ./mysql/logs:/logs
      - ./mysql/data:/var/lib/mysql
    restart: always

7.3.3 docker-compose模板文件常用指令

image:指定为镜像名称或镜像 ID
ports:设置暴露端口,容器端口 (HOST:CONTAINER) 格式
volumes:数据卷所挂载路径设置
command:覆盖容器启动后默认执行的命令
container_name:指定容器名称
environment:设置环境变量
build:指定 Dockerfile 所在文件夹的路径

7.3.4 docker-compose基本命令

创建并运行容器

docker-compose up -d

参数:

-d 表示后台运行

启动容器

docker-compose start

停止容器

docker-compose stop

停止并移除容器

docker-compose down

注意:命令必须在docker-compose.yml文件所在位置执行

八、持续集成/持续交付/持续部署(CI/CD)

8.1 什么是持续集成?

持续集成(Continuous Integration,简称CI),是一种软件开发实践,指的是只要代码有变更,就自动运行构建和测试,反馈运行结果。通俗一点来讲,就是绑定项目的代码仓库,SVN或者Git库,自动抓取新的代码,完成构建,甚至执行测试,反馈结果。

持续集成

容器技术,Docker,docker,运维,容器

8.2 什么是持续交付?

持续交付(Continuous delivery,简称CD),指的是将集成后的代码部署到更贴近真实运行环境的「类生产环境」中,进行系统测试。如果代码没有问题,可以继续手动部署到生产环境中。

持续交付

容器技术,Docker,docker,运维,容器

8.3 什么是持续部署?

持续部署(continuous deployment,简称CD)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。持续部署的目标是,代码在任何时刻都是可部署的,可以进⼊生产阶段。

持续部署

容器技术,Docker,docker,运维,容器

8.4 CI/CD中相关名词

持续 (Continuous):不断的获取反馈,响应反馈<br />	集成 (Integration):编译、测试、打包<br />	部署 (Deployment):应用组件或基本设施的代码或配置变更在产品环境生效称为“部署”<br />	发布 (Release):具有业务影响的功能变化对最终用户可见称为“发布”<br />	交付 (Delivery):可以理解为从开发分支到测试分支之间的阶段,更多的强调的是一种能力。开发有能力频繁的部署,业务有能力随时发布

8.5 CI/CD的优点

1、能够快速暴露错误<br />	2、保证代码提交质量<br />	3、定位错误更加容易<br />	4、降低整体集成风险<br />	5、促进产品快速迭代

九、CI/CD工具Jenkins

9.1 什么是jenkins?

简单来说,Jenkins是一款开源 CI/CD 软件,用于自动化各种任务,包括构建、测试和部署软件。Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序

官网地址

Jenkins

9.2 使用Jenkins实现CI/CD的具体流程

jenkins实现CI/CD的流程图

容器技术,Docker,docker,运维,容器

9.3 Jenkins安装

1、准备一台CI服务器(CentOS系统),提前安装好jdk、tomcat<br />	2、下载Jenkins的war包,上传部署到CI服务器的tomcat中的webapps文件夹下

jenkins安装流程

容器技术,Docker,docker,运维,容器

3、启动tomcat<br />	4、通过浏览器访问CI服务器:[http://CI-Server-IP:8080/jenkins/](http://CI-Server-IP:8080/jenkins/)

jenkins安装流程

容器技术,Docker,docker,运维,容器

5、根据提示获取管理员账号,并且登录<br />	6、Jenkins插件的安装,选择第一个安装默认插件(比较耗时甚至失败,可以忽略)

容器技术,Docker,docker,运维,容器

容器技术,Docker,docker,运维,容器

 

容器技术,Docker,docker,运维,容器

 

jenkins安装流程

容器技术,Docker,docker,运维,容器

7、重新设置管理员账号后,登录进首页

jenkins安装流程

容器技术,Docker,docker,运维,容器

9.4 CI服务器上安装Git

9.4.1 为什么需要在CI服务器上安装GIT?

因为CI服务器需要从代码仓库上拉取最新的代码,所以需要安装git

9.4.2 基于yum安装git

执行命令

yum -y install git

注意

yum安装git被安装在/usr/libexec/git-core目录下

9.5 CI服务器上安装Maven

9.5.1 为什么需要在CI服务器上安装Maven?

因为CI服务器需要将最新拉取的代码进行编译打包,对于Java工程都是基于Maven构建,所以需要安装Maven工具(如果集成部署的工程是基于其他构建工具需要根据实际场景调整)

9.5.2 基于yum安装maven

1、创建并进入文件夹:/usr/local/maven<br />	2、执行命令下载maven
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz
3、解压
tar -zvxf apache-maven-3.6.1-bin.tar.gz
4、编辑配置文件/usr/local/maven/apache-maven-3.6.1/conf/settings.xml,设置阿里云加速
<mirror>
	<id>alimaven</id>
	<mirrorOf>central</mirrorOf>
	<name>aliyun maven</name>
	<url>http://maven.aliyun.com/nexus/content/repositories/central/</url>
</mirror>

注意

可以不用配置环境变量,最后maven的执行者是jenkins,我们告诉jenkins绝对路径即可,环境变量是方便执行人工命令的

9.6 Jenkins安装相应的插件

1、进入插件管理页面

jenkins安装插件

容器技术,Docker,docker,运维,容器

2、搜索相关插件

jenkins安装插件

容器技术,Docker,docker,运维,容器

3、安装如下插件

git(用于git服务器拉取代码)
Maven Integration(用来构建Maven工程)
Publish Over SSH(用于将相关代码发布到远程服务器上)

9.7 配置Jenkins全局工具

1、进入全局工具配置

jenkins全局工具配置

容器技术,Docker,docker,运维,容器

2、配置JDK

配置JDK

容器技术,Docker,docker,运维,容器

3、配置git(如果没有这个选项,说明git插件没有安装成功,需要重新安装git插件)

配置GIT

容器技术,Docker,docker,运维,容器

4、配置Maven

配置Maven

容器技术,Docker,docker,运维,容器

9.8 配置Jenkins系统设置

1、进入系统设置

配置系统设置

容器技术,Docker,docker,运维,容器

2、准备一台部署服务器(部署服务器上安装好docker/docker-compose)<br />	3、配置SSH连接远程部署服务器(如果没有这个配置,说明ssh插件未安装成功)

配置ssh远程连接

容器技术,Docker,docker,运维,容器

9.10 创建Jenkins项目

1、选择新建项目<br />	2、设置项目名称,并且选择maven项目(如果没有maven项目选择,说明maven插件安装失败)

构建项目

容器技术,Docker,docker,运维,容器

3、配置项目源码管理

构建项目

容器技术,Docker,docker,运维,容器

4、配置构建命令

构建项目

容器技术,Docker,docker,运维,容器

5、配置构建后操作,这里选择ssh,将构建结果发送到部署服务器进行部署

构建项目

容器技术,Docker,docker,运维,容器

6、设置远程发布的配置

构建项目

容器技术,Docker,docker,运维,容器

source files 设置我们需要将什么文件上传到部署服务器
remote diretory 用于设置远程目录,所有上传的文件会上传到部署服务器的这个目录下
exec command 文件上传完成后,执行的命令(我们这里设置的是制作镜像并且运行的命令)

9.11 Jenkins构建并且部署项目

1、将最新的代码上传到代码仓库<br />	2、在Jenkins端执行代码构建

构建项目

容器技术,Docker,docker,运维,容器

3、查看构建日志

构建项目

容器技术,Docker,docker,运维,容器

4、访问部署服务器,查看最新的服务是否已经可以访问

9.12 附录

9.12.1 源码结构图

源码结构图

容器技术,Docker,docker,运维,容器

9.12.2 Dockerfile内容

FROM openjdk:8
WORKDIR /usr/local/software
COPY ./jenkinsTest.jar ./
EXPOSE 8888
CMD java -jar jenkinsTest.jar

仅供参考,具体写法需要根据实际业务改变

9.12.3 docker-compose.yml内容

version: "3.1"
services:
  jenkinstest:
    build:
      context: ./docker
      dockerfile: Dockerfile
    ports:
      - 8888:8888
    container_name: myproject

仅供参考,具体写法需要根据实际业务改变

十、Idea整合Docker部署

10.1 开启docker服务的远程连接

进入docker服务文件

vim /usr/lib/systemd/system/docker.service

修改配置

容器技术,Docker,docker,运维,容器

重启docker服务

systemctl daemon-reload
systemctl restart docker

注意

如果开启了防火墙,记得开放2375的端口

10.2 idea下载插件并且配置

idea下载插件

容器技术,Docker,docker,运维,容器

配置插件

容器技术,Docker,docker,运维,容器

10.3 SpringBoot整合Docker文章来源地址https://www.toymoban.com/news/detail-757467.html

FROM openjdk:8
WORKDIR /usr/local
COPY xxx.jar ./
EXPOSE 8080
CMD java -jar xxx.jar
<plugin>
  <groupId>com.spotify</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  <version>1.2.2</version>
  <configuration>
    <!-- 镜像名称  guoweixin/exam-->
    <imageName>ken/${project.artifactId}</imageName>
    <!--指定标签-->
    <imageTags>
      <imageTag>latest</imageTag>
    </imageTags>
    <!-- 指定 Dockerfile 路径-->
    <dockerDirectory>${project.basedir}/src/main/resources</dockerDirectory>
    <!--指定远程 docker api地址-->
    <dockerHost>http://docker服务path:2357</dockerHost>
    <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
    <resources>
      <resource>
        <targetPath>.</targetPath>
        <!--用于指定需要复制的根目录,${project.build.directory}表示target目录-->
        <directory>${project.build.directory}</directory>
        <!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar包文件。-->
        <include>${project.build.finalName}.jar</include>
      </resource>
    </resources>
  </configuration>

  <executions>
    <execution>
      <id>build-image</id>
      <phase>package</phase>
      <goals>
        <goal>build</goal>
      </goals>
    </execution>
  </executions>
</plugin>
//执行maven的打包命令,将自动通过Dockerfile构建镜像并且上传到远程的docker服务器上
package

到了这里,关于容器化技术-Docker的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • K8S:K8S自动化运维容器Docker集群

    (1)K8S全程为Kubernetes,由于K到S直接有8个字母简称为K8S。 (2)版本:目前一般是1.18~1.2.0,后续可能会到1.24-1.26,1.24版本后丢弃了docker(如需要使用需要第三方插件配合),目前最新版本是1.27 (3)官网:https://kubernetes.io GitHub:GitHub - kubernetes/kubernetes: Production-Grade Container S

    2024年02月10日
    浏览(77)
  • K8S:K8S自动化运维容器化(Docker)集群程序

    目录 一、K8S概述 1、什么是K8S 2、为什么要用K8S 3、作用及功能 二、K8S的特性 1、弹性伸缩 2、自我修复 3、服务发现和复制均衡 5、自动发布和回滚 6、集中化配置管理和秘钥管理 7、存储编排 8、任务批量处理运行 三、K8S的集群架构 四、K8S的核心组件 1、Master组件 ①Kube-apis

    2024年02月12日
    浏览(64)
  • 【Docker】Docker使用之容器技术发展史

    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长,值得我们全力奔赴更美好的生活✨ 🐤本篇文章将讲述Docker容器的技术发展史 😁容器不是一个新概念或者新

    2024年02月12日
    浏览(35)
  • 小白到运维工程师自学之路 第六十二集 (docker持久化与数据卷容器)

    一、概述 Docker持久化是指将容器中的数据持久保存在主机上,以便在容器重新启动或迁移时不丢失数据。由于Docker容器是临时和可变的,它们的文件系统默认是易失的,这意味着容器中的任何更改或创建的文件都只存在于此容器的生命周期内。但是,在许多场景中,我们希望

    2024年02月14日
    浏览(37)
  • 容器化技术-Docker

    一、引言 1.1 什么是Docker(重要 - 部署)? Docker 是一个开源的应用 容器 引擎,基于 Go 语言 并遵从Apache2.0协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙

    2024年02月04日
    浏览(30)
  • docker容器技术

    什么是docker Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 OverlayFS 类的 Union FS 等技术,对进程进行封装隔离,属于 操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。最初实现是基于

    2024年02月06日
    浏览(33)
  • 容器技术(Docker)

    容器技术的核心就是通过对资源的 限制 和 隔离 把进程运行在一个沙盒中。并且这个沙盒可以被打包成容器镜像(Image),移植到另一台机器上可以直接运行,不需要任何的多余配置。其中docker是容器技术的事实标准。 使用容器部署有什么优势? 容器具有强一致性,由同一

    2024年02月10日
    浏览(42)
  • Docker容器技术详解(四)

    本文章将介绍docker-compose技术,如果想要了解docker前置内容,可以查看以下两篇文章. Docker容器技术详解(一) Docker容器技术详解(二) Docker容器技术详解(三) 注意,要想使用docker-compose命令的话需要在有docker-compose.yml文件的目录才能使用docker-compose命令 启动docker-compose.yml文件 查看

    2024年02月08日
    浏览(40)
  • 容器技术—docker stack

    在之前的几篇文章中,我们介绍了Docker Compose,它是用来进行一个完整的应用程序相互依赖的多个容器的编排的,但是缺点是不能在分布式多机器上使用;我们也介绍了Docker swarm,它构建了docker集群,并且可以通过docker service在不同集群节点上运行容器服务,但是缺点是不能同

    2024年02月05日
    浏览(38)
  • Docker容器与虚拟化技术:Docker架构、镜像操作

    目录 一、理论 1.Doker概述 2.Docker核心概念 3.Docker安装 4.Docker的镜像管理命令 二、实验 1.Docker安装 2.查看Docker信息 3.Docker的镜像管理命令 三、问题 1.如何注册Docker账号  2.如何设置Docker公共存储库 四、总结 (1) IT架构 裸金属 → 虚拟机 → 容器→ 函数化、代码化 云计算涌现出很

    2024年02月10日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包