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)
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
3.重启docker
systemctl daemon-reload
service docker restart
4.本地测试
浏览器访问 ip:2375/version
二.安装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
5.执行Dockerfile
docker build -t dockfile:1.0 .
- -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
- . : 表示从当前路径开始寻找Dockerfile文件开始执行
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
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
-
配置项说明:
- Name:随便填写名称
- Server:在IDEA中配置的Docker服务
- Dockerfile:选择刚刚编写的Dockerfile
- Image tag:镜像的版本,例如:dockerdemo:1.0
- Container name:运行现实的容器名称
- Bind prots:绑定端口。例如:9090:8080 前面是宿主端口,后面是容器内该项目的端口
- Bind mounts:绑定目录,需要的绑定,格式和绑定端口一样
- 端口绑定相当于docker run -p 的作用将容器的端口映射到主机不然会拒绝链接。
- 执行前要选择添加maven,是运行前打包项目,不然每次运行都需要手动打包非常麻烦。
-
运行配置好的Docker
-
xxxx has been deployed successfully
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
**注意:**我们这里用作测试,并没有在pom中配置私服等。请根据生产实际情况进行配置
三.安装Git
yum install git
git --version
四.安装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
2.安装
将Jenkins的镜像源换为国内节点的镜像源
yum -y install https://mirrors.cnnic.cn/jenkins/redhat-stable/jenkins-2.303.1-1.1.noarch.rpm
3.启动和停止
service jenkins start/stop/restart
chkconfig jenkins on
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服务
5.登陆
vi /var/lib/jenkins/secrets/initialAdminPassword
执行上方命令找到对应的管理员密码进行登录,使用推荐安装插件,等待安装完成。
五.全局配置Jenkins
1.手动安装Maven插件
Maven Integration plugin
:有了它在新建Job时才能有Maven项目可以选择
Deploy to container Plugin
:将war包部署到tomcatshang
找到mvane相关的插件打勾,并且安装。
2.手动安装Publish Over SSH
**Publish Over SSH:**通过ssh推送文件,并可以执行shell命令
3.配置Publish Over SSH
- 配置
- Manage jenkins --> Configura System -->Publish over SSH
- 测试成功
4.全局配置
还需要指定jenkins的jdk和maven
配置JDK
配置Maven
六.Jenkins新建任务
1.新建Maven
在主页左侧点击新建,选择构建一个Maven项目,点击确定,主页列表会出现该项目。
2.配置Git
3.配置触发器
4.构建环境不设置
5.Maven构建
**Pre Steps:**构建前的操作,可以增加执行shell,配置脚本echo “Pre Steps脚本启动成功”,此内容会在构建控制台中打印出来
**Build:**Root POM配置pom.xml(要构建的工程必须是maven,有pom文件),Goals and options配置clean package(也就是mvn的构建命令)
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
7.文件说明
我们做测试就利用上方我们的Dockerfile来进行操作,以下操作全部都在上方jenkins配置的路径下进行
- 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构建成功
- 服务器
- Docker
问题:发现是Dockerfile中有书写错误,修改后运行:
- 浏览器访问成功:
八.参考
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
购买以后我们直接进入管理控制台
二.操作
1.找到个人实例
选择容器镜像服务以后就会跳转到实例列表,这个时候注意记得把上面的归属地切换成你购买服务器地区,这里有的时候会有bug,默认不是你购买的服务器的所属区域。然后再点击个人实例进入实例详情页。
2.命名空间-镜像仓库-访问凭证
进入个人实例详情以后先进入命名空间,创建一个空间,然后再点击镜像仓库创建一个镜像仓库以便后期推送镜像到仓库里。镜像仓库是必须放在命名空间下的,目前阿里云运行个人创建3个命名空间。最后就是点击访问凭证,设置一个密码然后以便上传的时候校验。
注意:我们可以看到阿里云是可以git提交代码的时候自动构建的(对于生产环境来说是不安全的),我们这里先使用本地仓库为例,后续再来研究一下这个自动构建
3.登陆-上传-下载命令
其实阿里云对于开发者是比较油耗的,如何进行操作已经在官网写明
- 登陆
- 上传下载
下面的操作就行云流水,就按照阿里云给的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]和[镜像版本号]参数。
我们基于上图中dockerregistry:1.0做示例
成功后我们可以使用docker images查看,会出现一个新的镜像且他的image id是和基于的镜像是相同的
6.推送镜像到阿里云私有库
docker push registry.cn-beijing.aliyuncs.com/命名空间名称/镜像仓库名称:[镜像版本号]
执行后耐心等待推送完成;可能是因为网络问题推送时间很长,后面导致了一次推送失败。
没有设置访问凭证也会造成推送失败。
7.在私有库查看自己推送的镜像
进入对应的私有库后查看
8.下载私有库的镜像
我们这里因为没有第二台机器做测试,先将Docker本地仓库的镜像删除后,从远程私有库进行拉取。
9.验证启动
浏览器访问成功