本文,我们来讲解下如何进行 docker
镜像的构建、项目的运行并且结合 Jenkins
实现构建~
构建镜像
假设我们在目标机器和 jenkins
机器上都已经安装了 Docker
。
通过
Docker -v
进行验证。当然,如果你只是想在本地测试,在自己的电脑上安装docker
环境。
那么,我们可以通过类似 docker build --force-rm -t target.jimmy.com/test:demo .
来构建镜像,上面👆的意思是:
--force-rm
:在构建过程完成后,强制删除中间容器。-t target.jimmy.com/test:demo
:指定要构建的镜像的名称和标签。.
:表示 Dockerfile 所在的路径。
是的,上面命令行执行后,会在项目的根目录下寻找 dockerfile
来执行。
我们编写下 dockerfile
文件:
bash
# 拉取基础镜像
FROM registry.cn-hangzhou.aliyuncs.com/zhengqing/nginx:1.21.1
# 复制打包文件
COPY dist/. /usr/share/nginx/html
COPY nginx /etc/nginx
# 暴露端口
EXPOSE 8001
上面,我们拉取了基础镜像 registry.cn-hangzhou.aliyuncs.com/zhengqing/nginx:1.21.1
,然后将项目的打包文件 dist
复制到镜像中的 /usr/share/nginx/html
目录下。并把 nginx
文件夹内容复制到 /etc/nginx
,并暴露出了端口为 8001
。
假设我们编写的是单页面应用,dist
为其打包文件内容。我们对 nginx
添加的配置如下:
bash
- nginx
- conf.d
- demo.conf
- nginx.conf
nginx.conf
中的重点是引入 conf.d
下的所有文件:
bash
http {
# other
include /etc/nginx/conf.d/*.conf;
# other
}
然后我们编写 demo.conf
文件:
bash
server {
listen 8001;
server_name _;
root /usr/share/nginx/html;
location / {
index /index.html;
try_files $uri $uri/ /index.html;
}
error_page 404 403 /404.html;
}
上面,我们监听了 8001
的端口,并将入口文件指向了 index.html
文件。
自此,我们就可以构建一个镜像。
结合 Jenkins
那么,我们结合 Jenkins
进行构建镜像和推送。
bash
stage("docker") {
agent any;
steps {
script {
steps.gitlabCommitStatus(name: 'publish') {
docker.withRegistry('https://target.jimmy.com/', 'jimmy') {
sh "docker ps"
sh "docker build --force-rm -t target.jimmy.com/test:demo ."
sh "docker push target.jimmy.com/test:demo"
sh "docker rmi target.jimmy.com/test:demo"
}
}
}
}
}
我们通过 withRegistry
登录到我们私服。然后通过 docker build --force-rm -t target.jimmy.com/test:demo .
构建镜像 target.jimmy.com/test:demo
;接着,我们通过 docker push
推送镜像。最后通过 docker rmi
删除镜像。
运行项目
到目前为止,我们已经将镜像推送到私服了。那么,接下来,我们在目标机器上进行镜像的拉取,容器的启动等。
当然,目标机器上也需要安装
docker
环境
我们进入了目标机器,通过执行 docker pull target.jimmy.com/test:demo
拉取镜像。
然后,我们启动容器:
bash
docker run -itd -p 9991:8001 target.jimmy.com/test:demo
-itd
:在交互模式下运行容器,并将其分离到后台。-p 9991:8001
:将容器的端口 8001 映射到主机的端口 9991。
我们通过地址访问 404
页面,如下:
docker 重要命令行
- docker ps:查看正在运行的容器
- docker ps -a:查看所有的容器
- docker stop <容器ID或容器名称>:停止指定正在运行的容器
- docker rm <容器ID或容器名称>:删除指定的容器
- docker exec -it <容器ID或容器名称> /bin/bash:进入指定的容器
- docker logs <容器ID或容器名称>:查看容器日志「容器运行不起来时候定位」
- docker image ls:查看所有的镜像
- docker image rm <镜像ID或镜像名称>:删除指定的镜像「需要该镜像下的容器全部移除才可以执行成功」