Docker安装、Dockerfile、Docker集成微服务、Docke私有仓库推送

本文详尽介绍了Docker的安装过程,包括卸载旧版本、安装、启动、停止、验证以及使用阿里云镜像。接着,通过部署Springboot项目展示了Dockerfile的编写、IDEA远程访问、镜像打包和上传。此外,还讨论了Docker私有仓库的使用,包括登录、推送和下载镜像。整个流程覆盖了Docker的基础操作和企业级应用。
摘要由CSDN通过智能技术生成

Docker安装、Dockerfile、Docker集成微服务、Docke私有仓库推送

Docker安装

目录

一.官方安装文档:

https://docs.docker.com/engine/install/centos/

二.安装

1.卸载旧版本
yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
2.安装
yum install docker
3.启动
systemctl start docker

systemctl enable docker 开机自启

systemctl daemon-reload 守护进程重启
4.停止
systemctl stop docker
5.验证
sudo docker run hello-world
6.卸载
sudo yum remove docker-ce docker-ce-cli containerd.io

sudo rm -rf /var/lib/docker

sudo rm -rf /var/lib/containerd
7.查看版本
docker version
8.使用阿里云镜像
sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://wuu3kgje.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reload

sudo systemctl restart docker
9.查看镜像状态
docker info

出现下述提示代表成功

Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
 127.0.0.0/8
Registry Mirrors:
 https://wuu3kgje.mirror.aliyuncs.com
Live Restore Enabled: false
Registries: docker.io (secure)

image-20211104181320160

10.删除镜像
docker rmi 镜像ID

强制删除

docker rmi -f 镜像ID

部署Springboot项目

以下操作全部基于该项目

Gitee地址:https://gitee.com/yixiuyu/docker.git

一.打开linux中docker的远程访问权限

1.编辑linux的docker文件
vim /usr/lib/systemd/system/docker.service
2.修改ExecStat参数
ExecStart=/usr/bin/dockerd   -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock

image-20211104181412708

3.重启docker
systemctl daemon-reload
service docker restart
4.本地测试

浏览器访问 ip:2375/version

image-20211108170440392

二.安装Java8

1.安装
yum -y install java-1.8.0-openjdk*
2.配置环境变量
vim /etc/profile
export JAVA_HOME=/usr/lib/jvm/java-1.8.0
export PATH=$PATH:$JAVA_HOME/bin
3.加载
source /etc/profile
4.验证
java -version

三.使用IDEA远程访问并打包项目镜像上传到docker

1.编写一个Boot项目

启动maven pom中需要做一些特殊处理,引入docker插件

<properties>
       <java.version>1.8</java.version>
       <docker.image.prefix>springboot-docker</docker.image.prefix>
</properties>

<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <!-- Docker maven plugin -->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>
        </plugins>
    </build>
2.编写Dockerfile
  • 第一种
#获取base image
FROM adoptopenjdk/openjdk8:latest
#类似于执行 linux指令
RUN mkdir -p /data/service
#类似于linux copy指令
COPY dockerfile-0.0.1-SNAPSHOT.jar /data/service
#对外端口
EXPOSE 8080
#执行命令 java -jar /opt/app/demo-docker.jar
CMD ["java", "-jar", "/data/service/dockerfile-0.0.1-SNAPSHOT.jar"]
3.使用maven package打包项目
4.将jar包和Dockerfile文件上传到linux

image-20211104181552468

5.执行Dockerfile
docker build -t dockfile:1.0 .
  • -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
  • . : 表示从当前路径开始寻找Dockerfile文件开始执行
  • image-20211104181723426
6.查看构建结果
docker images
7.启动镜像

交互式启动方式:

docker run -it -p 8080:8080 dockfile:1.0

守护进程是启动方式:

docker run -d -p 9090:8080 dockfile:1.0
  • -i: 以交互模式运行容器,通常与 -t 同时使用;

  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口

    以上方9090:8080为例: 外部访问9090端口能够映射到内部8080端口

  • dockfile:1.0:镜像的名称组成 REPOSITORY:TAG

8.浏览器访问 ip:9090
9.查看启动容器
docker ps
10.查看启动日志
docker logs 容器ID
11.进入正在运行的容器
docker exec -it  容器ID  /bin/bash
12.退出容器
exit
13.关闭容器
docker stop 容器ID

四.使用IDEA直连Docker构建镜像执行

1.IDEA配置Docker
  • File --> Settiongs --> Build–> Docker
  • 添加Docker
  • 设置TCP socket --> tcp://ip:2375 ip指的是docker所在机器ip

image-20211104180341913

image-20211104181006234

2.在项目根目录编写Dockerfile
#获取base image
FROM adoptopenjdk/openjdk8:latest
#指定作者
MAINTAINER yixiuyu
#对外端口
EXPOSE 8080
#将复制target文件中的jar为容器中的test.jar,相当于拷贝到容器中取了个别名
ADD target/dockerfile-0.0.1-SNAPSHOT.jar /data/service/dockerfilelinux-0.0.1-SNAPSHOT.jar
#创建一个新的容器并在新的容器中运行命令
RUN bash -c 'touch /data/service/dockerfilelinux-0.0.1-SNAPSHOT.jar'
#设置时区 根据情况看是否需要
#ENV TZ=PRC
#RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
#相当于在容器中用cmd命令执行jar包  指定外部配置文件
ENTRYPOINT ["java", "-jar", "/data/service/dockerfilelinux-0.0.1-SNAPSHOT.jar", "--spring.profiles.active=dev"]
3.配置Docker
  • 在idea右上角配置,添加Dockerfile

image-20211104180510804

image-20211104180549726

  • 配置项说明:

    • Name:随便填写名称
    • Server:在IDEA中配置的Docker服务
    • Dockerfile:选择刚刚编写的Dockerfile
    • Image tag:镜像的版本,例如:dockerdemo:1.0
    • Container name:运行现实的容器名称
    • Bind prots:绑定端口。例如:9090:8080 前面是宿主端口,后面是容器内该项目的端口
    • Bind mounts:绑定目录,需要的绑定,格式和绑定端口一样
    • 端口绑定相当于docker run -p 的作用将容器的端口映射到主机不然会拒绝链接。
    • 执行前要选择添加maven,是运行前打包项目,不然每次运行都需要手动打包非常麻烦。

    image-20211104180816518

    image-20211104180851445

    image-20211104180928740

  • 运行配置好的Docker

  • image-20211104181023816

  • xxxx has been deployed successfully

  • image-20211104181151147

4.访问对外端口接口进行验证
5.错误

可能会提示没有成功链接docker服务,但是经过检查是可以连接的。

解决方案:

用管理员身份去启动IDEA,有些插件是需要管理员身份才能正确运行下去的。

使用jenkins自动构建SpringBoot项目(待完善)

一.安装JDK

二. 安装Maven

1.下载
wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
2.解压
tar vxf apache-maven-3.5.4-bin.tar.gz
3.移动
mv apache-maven-3.5.4 /usr/local/maven3
4.配置环境变量
vi /etc/profile
MAVEN_HOME=/usr/local/maven3
export MAVEN_HOME
export PATH=${PATH}:${MAVEN_HOME}/bin
5.加载
source /etc/profile
6.验证
mvn -version

image-20211105163837098

**注意:**我们这里用作测试,并没有在pom中配置私服等。请根据生产实际情况进行配置

三.安装Git

yum install git

git --version

image-20211105164026045

四.安装Jenkins

1.安装yum repos
sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.repo sudo rpm –import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key  

rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key  

image-20211105170009487

2.安装

将Jenkins的镜像源换为国内节点的镜像源

yum -y install https://mirrors.cnnic.cn/jenkins/redhat-stable/jenkins-2.303.1-1.1.noarch.rpm

image-20211105171104604

3.启动和停止
service jenkins start/stop/restart

chkconfig jenkins on

image-20211105171153747

4.注意

部署jenkins服务器出现Please wait while Jenkins is getting ready to work …一直进不去该怎么办?

需要你进入jenkins的工作目录,打开-----hudson.model.UpdateCenter.xml将 url 中的 
https://updates.jenkins.io/update-center.json
更改为https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
是国内的清华大学的镜像地址。
或者更改为http://updates.jenkins.io/update-center.json,即去掉 https 中的 s 。
然后重启tomcat服务

image-20211105171858707

image-20211105171908816

5.登陆
vi /var/lib/jenkins/secrets/initialAdminPassword

image-20211105172143882

执行上方命令找到对应的管理员密码进行登录,使用推荐安装插件,等待安装完成。

image-20211105172419769

五.全局配置Jenkins

1.手动安装Maven插件

Maven Integration plugin:有了它在新建Job时才能有Maven项目可以选择
Deploy to container Plugin:将war包部署到tomcatshang

image-20211105181642356

找到mvane相关的插件打勾,并且安装。

image-20211105181718472

2.手动安装Publish Over SSH

**Publish Over SSH:**通过ssh推送文件,并可以执行shell命令

3.配置Publish Over SSH
  • 配置
  • Manage jenkins --> Configura System -->Publish over SSH

image-20211108134618090

  • 测试成功

image-20211108134657829

4.全局配置

还需要指定jenkins的jdk和maven

image-20211105182220372

配置JDK

image-20211105182241107

配置Maven

image-20211105182251068

六.Jenkins新建任务

1.新建Maven

在主页左侧点击新建,选择构建一个Maven项目,点击确定,主页列表会出现该项目。

image-20211105181029202

2.配置Git

image-20211105184209085

3.配置触发器

image-20211105184529829

4.构建环境不设置
5.Maven构建

**Pre Steps:**构建前的操作,可以增加执行shell,配置脚本echo “Pre Steps脚本启动成功”,此内容会在构建控制台中打印出来

**Build:**Root POM配置pom.xml(要构建的工程必须是maven,有pom文件),Goals and options配置clean package(也就是mvn的构建命令)

image-20211105185211107

6.构建后的操作

在配置最后找到“增加构建后操作步骤”,选择"Send build artifacts over SSH"

配置说明:

  • SSH Server Name 就是前面配置的Publish Over SSH 的名称
  • Source files 是指源文件位置,这个位置是在jenkins的工作目录下的job文件在内 ,(/var/lib/jenkins/workspace/cicd_demo 默认路径 cicd_demo是我的job名称,maven 编译后会在此文件内创建 target 目录, cicd-demo*.jar是构建后jar包命名前缀+版本号见pom.xml 中 artifactId ,此处请根据实际情况进行调整)
  • Remove prefix 删除前缀 target
  • Remote directory 远程目录,结合前面Publish Over SSH配置就是 /root/test 目录,这些配置完毕以后, jenkins 在编译成功后,就会自动把 文件 copy 到 B主机下的/root/test
  • Exec command , 我这里的操作是吧 主机 /root/test 的文件 复制到 我自己的 /usr/local/project/cicd_demo下 然后进入到此目录,执行我的 buildimage.sh 和 run.sh

image-20211108145023791

7.文件说明

我们做测试就利用上方我们的Dockerfile来进行操作,以下操作全部都在上方jenkins配置的路径下进行

image-20211108141018991

  • buildimage.sh 用来构建镜像,下方为buildimage.sh内容 :
docker build -t dockerjinkens:1.0 .
  • Dockerfile 为构建镜像所需文件,下方为Dockerfile 内容:
#获取base image
FROM adoptopenjdk/openjdk8:latest
#指定作者
MAINTAINER yixiuyu
#对外端口
EXPOSE 8082
#将复制target文件中的jar为容器中的test.jar,相当于拷贝到容器中取了个别名
ADD dockerfile-0.0.1-SNAPSHOT.jar /data/service/dockerfilejenkins-0.0.1-SNAPSHOT.jar
#创建一个新的容器并在新的容器中运行命令
RUN bash -c 'touch /data/service/dockerfilejenkins-0.0.1-SNAPSHOT.jar'
#设置时区 根据情况看是否需要
#ENV TZ=PRC
#RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
#相当于在容器中用cmd命令执行jar包  指定外部配置文件
ENTRYPOINT ["java", "-jar", "/data/service/dockerfilejenkins-0.0.1-SNAPSHOT.jar", "--spring.profiles.active=online"]
  • run.sh 用来启动容器,下方为run.sh 内容:
# 目前先注释掉不执行,删除
# docker rm -f cicd_demo
# 启动镜像
docker run -d -p 9092:8080 dockerjinkens:1.0

七.Jenkins启动

1.启动
  • Jenkins:jenkins构建成功

image-20211108150530670

  • 服务器

image-20211108150604944

  • Docker

问题:发现是Dockerfile中有书写错误,修改后运行:

image-20211108154400891

  • 浏览器访问成功:

image-20211108154322014

八.参考

1.参考文档
  • https://segmentfault.com/a/1190000014325300
  • https://blog.csdn.net/njzcx/article/details/80979157
  • https://blog.csdn.net/a854517900/article/details/107211021/

私有仓库

一.介绍

Docker库我们可以简单的理解为Maven,有一个Docker官方提供的公共库,这个公共库对于国内来说是比较慢的,我们这时候可以配置国内镜像。同样的Docker也有私有库的概念,私有库来存放我们自己特有的镜像,比如一个Java程序等等;这个私有库官方也是有提供,我们只需要去官方注册并创建私有库即可;但是我们也可以使用三方服务。

这种私有库服务商有很多,但是功能和操作差异并不大;比如国内的阿里云、腾讯云等。我们以阿里云为例,地址如下:

https://www.aliyun.com/product/acr?spm=5176.21213303.J_6704733920.7.330d3edaTlDNMy&scm=20140722.S_product%40%40%E4%BA%91%E4%BA%A7%E5%93%81%40%4088099..ID_product%40%40%E4%BA%91%E4%BA%A7%E5%93%81%40%4088099-RL%E9%95%9C%E5%83%8F-OR_main-V_2-P0_0

image-20211105134630031

购买以后我们直接进入管理控制台

二.操作

1.找到个人实例

选择容器镜像服务以后就会跳转到实例列表,这个时候注意记得把上面的归属地切换成你购买服务器地区,这里有的时候会有bug,默认不是你购买的服务器的所属区域。然后再点击个人实例进入实例详情页。

image-20211105135005592

2.命名空间-镜像仓库-访问凭证

进入个人实例详情以后先进入命名空间,创建一个空间,然后再点击镜像仓库创建一个镜像仓库以便后期推送镜像到仓库里。镜像仓库是必须放在命名空间下的,目前阿里云运行个人创建3个命名空间。最后就是点击访问凭证,设置一个密码然后以便上传的时候校验。

image-20211105135421994

image-20211105135704187

注意:我们可以看到阿里云是可以git提交代码的时候自动构建的(对于生产环境来说是不安全的),我们这里先使用本地仓库为例,后续再来研究一下这个自动构建

image-20211105140015969

image-20211105140240363

3.登陆-上传-下载命令

其实阿里云对于开发者是比较油耗的,如何进行操作已经在官网写明

  • 登陆

image-20211105140535968

  • 上传下载

image-20211105140615803

image-20211105140731106

下面的操作就行云流水,就按照阿里云给的Shell进行操作

4.在Docker上登陆阿里云镜像

用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。

您可以在访问凭证页面修改凭证密码。

docker login --username=用户名 registry.cn-beijing.aliyuncs.com
5.给想推送的镜像打个标签

这里的ImageId可以直接用镜像的名称代替,镜像版本号你可以随便定义。还有一个需要注意的是如果你远程并没有建立镜像仓库,那么执行这个命令的时候也会在远程给你建立对应的仓库。例如我的命令中dmqk-namespace就是我创建的命名空间,dmqk-repository-test就是我针对mysql镜像创建的镜像仓库,如果我远程没有创建dmqk-repository-test这个仓库,那么就会自动帮我创建。

docker tag [ImageId] registry.cn-beijing.aliyuncs.com/命名空间名称/镜像仓库名称:[镜像版本号]

请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。

image-20211105151104226

我们基于上图中dockerregistry:1.0做示例

image-20211105151121652

成功后我们可以使用docker images查看,会出现一个新的镜像且他的image id是和基于的镜像是相同的

image-20211105151156837

6.推送镜像到阿里云私有库
docker push registry.cn-beijing.aliyuncs.com/命名空间名称/镜像仓库名称:[镜像版本号]

执行后耐心等待推送完成;可能是因为网络问题推送时间很长,后面导致了一次推送失败。

image-20211105155126409

没有设置访问凭证也会造成推送失败。

7.在私有库查看自己推送的镜像

进入对应的私有库后查看

image-20211105155452399

8.下载私有库的镜像

我们这里因为没有第二台机器做测试,先将Docker本地仓库的镜像删除后,从远程私有库进行拉取。

image-20211105160307499

image-20211105160407030

9.验证启动

image-20211105160829685

浏览器访问成功

image-20211105160902896

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值