前期准备
在这里先亮一下所涉及的环境设备 阿里云服务器:
- CPU&内存: 2核(vCPU)2 GiB**
- 操作系统: CentOS 8.5 64位****
第一步安装docker
安装命令:
bash
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
当出现如下命令:
说明已经安装成功了
第二步安装docker-compose
这一步比较折腾, 按照网上的方法,使用如下命令, 即可完成下载:
ruby
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
但却得到如下结果:
下载失败,并且提示: Permission denied
无权限问题
有效的方法就是这两种:
输入如下命令:
bash
sudo usermod -aG docker $USER
bash
chmod +x /usr/local/bin/docker-compose
然后结果如下:
报出了一个新的问题
安装失败或缺失
报错:
bash
/usr/local/bin/docker-compose: line 1: html: No such file or directory
/usr/local/bin/docker-compose: line 2: syntax error near unexpected token `<'
'usr/local/bin/docker-compose: line 2: `<head><title>503 Service Temporarily Unavailable</title></head>
解决方法:
重新安装docker-compose,国内的有些快捷方式有些是有问题的,可能短期内能够使用,时间长了就会出现问题
尽量直接使用GitHub的,如果一次下载不成,多执行几遍就可以
命令如下:
bash
curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
最终效果:安装成功!
检查命令: docker-compose -v
第三步安装Nginx和Jenkins
使用docker拉取nginx、jenkins镜像
bash
docker pull nginx
docker pull jenkins/jenkins
拉取完之后,查看镜像
bash
docker images
以下这部分内容是挪用《Docker + Jenkins + Nginx实现前端自动化部署》来的
创建docker的相关目录,方便维护
bash
mkdir /docker
mkdir /docker/compose
mkdir /docker/jenkins_home
mkdir /docker/nginx
mkdir /docker/nginx/conf
mkdir /docker/html
mkdir /docker/html/dev
mkdir /docker/html/release
mkdir /docker/html/pro
创建docker-compose.yml
、nginx.conf
配置文件
bash
cd /docker/compose
touch docker-compose.yml
cd /docker/nginx/conf
touch nginx.conf
最终目录结构如下:
bash
+ docker
+ compose
- docker-compose.yml //docker-compose配置
+ html //各环境代码目录(实际项目可能不在同一目录)
+ dev //dev环境代码目录
+ release //release环境代码目录
+ pro //pro环境代码目录
+ jenkins_home //Jenkins工程目录
+ nginx //nginx工程目录
+ conf
- nginx.conf //nginx配置
nginx.conf
javascript
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
gzip on;
#dev环境
server {
#监听的端口
listen 8001;
server_name localhost;
#设置日志
# access_log logs/dev.access.log main;
#定位到index.html
location / {
#linux下HTML文件夹,就是你的前端项目文件夹
root /usr/share/nginx/html/dev/dist;
# root /home/html/dev/dist;
#输入网址(server_name:port)后,默认的访问页面
index index.html;
try_files $uri $uri/ /index.html;
}
}
#sit环境
server {
#监听的端口
listen 8002;
server_name localhost;
#设置日志
# access_log logs/sit.access.log main;
#定位到index.html
location / {
#linux下HTML文件夹,就是你的前端项目文件夹
root /usr/share/nginx/html/sit/dist;
# root /home/html/dev/dist;
#输入网址(server_name:port)后,默认的访问页面
index index.html;
try_files $uri $uri/ /index.html;
}
}
# include /etc/nginx/conf.d/*.conf;
}
重点: 进入服务器控制台安全组配置添加三个都端口。 8080:对应jenkins 8001:对应dev环境 8002:对应sit环境
docker-compose.yml
yml
version: '3'
networks:
frontend:
external: true
services: # 容器
docker_jenkins:
user: root # root权限
restart: always # 重启方式
image: jenkins/jenkins:lts # 使用的镜像
container_name: jenkins # 容器名称
environment:
- TZ=Asia/Shanghai
- "JENKINS_OPTS=--prefix=/jenkins_home" ## 自定义 jenkins 访问前缀(上下文context)
ports: # 对外暴露的端口定义
- 8080:8080
- 50000:50000
volumes: # 卷挂载路径
- /docker/jenkins_home/:/var/jenkins_home # 挂载到容器内的jenkins_home目录
- /usr/local/bin/docker-compose:/usr/local/bin/docker-compose
docker_nginx_dev: # nginx-dev环境
restart: always
image: nginx
container_name: nginx_dev
ports:
- 8001:8001
volumes:
- /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /docker/html:/usr/share/nginx/html
- /docker/nginx/logs:/var/log/nginx
docker_nginx_sit: # nginx-sit环境
restart: always
image: nginx
container_name: nginx_sit
ports:
- 8002:8002
volumes:
- /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /docker/html:/usr/share/nginx/html
- /docker/nginx/logs:/var/log/nginx
配置说明:
docker_jenkins
是一个定义的服务名称。 user: root
指定了 Jenkins 容器使用 root 权限。 restart: always
表示容器总是在退出时重启。 image: jenkins/jenkins:lts
指定了 Jenkins 镜像及其版本。 container_name: jenkins
是容器的名称。 ports
定义了容器内外端口的映射。 volumes
定义了主机文件系统路径与容器内路径的挂载关系。 image: nginx
指定了 Nginx 镜像。 container_name: nginx_dev
是容器的名称。
docker如何移除jenkins
要从Docker中删除Jenkins容器,可以按照以下步骤进行操作:
- 首先,使用
docker ps -a
命令查看所有正在运行的或已经停止的容器。确认Jenkins容器的ID或名称。 - 然后,使用
docker stop <container_id>
(将替换为Jenkins容器的ID)来停止该容器。 - 接下来,使用
docker rm <container_id>
(同样需要将替换为Jenkins容器的ID)来删除该容器。 - 最后,还可以通过
docker images
命令列出本地存储库中的所有图像,并使用docker rmi <image_id>
(将替换为Jenkins镜像的ID)来删除相应的镜像。
注意事项:
- 在执行上述命令之前,请确保没有其他重要数据依赖于这些容器或镜像。
- 若要完全清理Docker系统中不再使用的对象,可以使用
docker system prune
命令。
第四步启动环境
先启动docker, 如果已经设置自动启动,可忽略
javascript
systemctl start docker
然后启动Jenkins、Nginx, 这一步要在docker-compose.yml当前目录下,执行该命令,不然会报找不到
javascript
docker-compose up -d
查看运行状态
javascript
docker-compose ps -a
[root@iZ7xvdmlqb3e0e0teakf5vZ ~]# cd /docker/compose [root@iZ7xvdmlqb3e0e0teakf5vZ compose]# docker-compose ps -a
然后访问地址,即可
因为文章篇幅太大,所以Jenkins的配置和使用放到第二篇。欢迎关注
docker常用命令
查看Docker容器的命令,可以使用docker ps -a
命令。这将显示所有正在运行或已经停止的容器及其相关信息,包括容器ID、镜像名称、创建时间等。
如果需要获取特定容器的详细信息,可以使用docker inspect <container_id>
命令来查看该容器的配置和状态。
下面是一些常用的Docker容器管理命令示例:
docker run
: 创建并运行新的容器。docker start/stop/restart
: 分别启动、停止和重启指定的容器。docker exec
: 进入到正在运行中的容器内部执行命令。docker logs
: 输出容器的日志信息。docker rm
: 删除不再需要的容器。docker images
: 列出本地主机上存在的镜像。docker pull
: 从互联网上拉取最新版本的镜像。docker push
: 将自定义的镜像推送到互联网上共享。docker build
: 根据 Dockerfile 构建新的镜像。
设置服务器配置
进入服务器检查docker、docker-compose版本
csharp
[root@VM-12-6-centos ~]# docker -v
Docker version 20.10.5, build 55c4c88
[root@VM-12-6-centos ~]# docker-compose -v
docker-compose version 1.28.6, build 5db8d86f
设置docker开机启动
bash
sudo systemctl enable docker
sudo systemctl start docker