目錄
- 相關配置安裝
- 創建配置文件
- 項目打包與部署
- 一個相關報錯:
- 總結
相關配置安裝
安裝Docker
yum install docker
啟動服務 start docker
systemctl start docker
Docker中拉取nginx
鏡像
docker pull nginx
創建配置文件
我們需要在根目錄下創建Dockerfile文件和default.conf文件。
其中default.conf文件的名稱是什么無所謂,只要在配置文件中注意使用相同名稱即可。
Dokcerfile文件具體內容如下:
FROM nginx:latest # 將項目根目錄下dist文件夾下的所有文件復制到鏡像中 /usr/share/nginx/html/ 目錄下 COPY dist/ /usr/share/nginx/html/ COPY default.conf /etc/nginx/conf.d/default.conf
FROM nginx:latest
: 命令的意思該鏡像是基于 nginx:latest 鏡像而構建的。COPY dist/ /usr/share/nginx/html/
:命令的意思是將項目根目錄下 dist 文件夾下的所有文件復制到鏡像中/usr/share/nginx/html/
目錄下。
這里鏡像中的目錄我們不要動,但需要保證我們項目的打包目錄是dist/
,或者自定義到你打包的目錄下。
COPY default.conf /etc/nginx/conf.d/default.conf
命令的意思是將 Nginx 目錄下的 default.conf 復制到 etc/nginx/conf.d/default.conf,用本地的 default.conf 配置來替換 Nginx 鏡像里的默認配置。
這里鏡像中的目錄我們不要動,但需要保證我們編寫的文件名也為default.conf
,或者與你自己寫的文件名對應
default.conf
下面的配置直接照抄就好,特別注意,監聽的端口號并不需要動,這里的80端口指的是容器的端口,最后我們會將容器的端口映射到我們宿主服務器的端口,比如映射到8888端口。
8888:80
然后 注意修改為自己的服務器IP地址
完整配置:
upstream my_server{ server 121.41.4.33:3000; # 后端server 地址 keepalive 2000; } server { listen 80; #這里的端口號不要動,80端口指的是容器的端口,最后我們會將容器的端口映射到我們宿主服務器的端口,比如映射到8888端口 server_name 111.20.xxx.xxx; # 修改為docker服務宿主機的ip/域名 #charset koi8-r; access_log /var/log/nginx/host.access.log main; error_log /var/log/nginx/error.log error; location / { root /usr/share/nginx/html; index index.html index.htm; try_files $uri $uri/ /index.html =404; } # 這里就是和vue本地代理的意思一樣,已api開頭的路徑都代理到本機的3000端口 location /api/ { proxy_pass http://my_server/api; proxy_set_header Host $host:$server_port; rewrite ^/api/(.*) /$1 break; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
項目打包與部署
將打包項目,把dist
文件夾和剛剛創建的Dockerfile
,default.conf
放到同一目錄,并上傳到服務器。
比如,我的代碼存放位置是/home/test
目錄。
然后需要構建鏡像
docker build -t test .
docker build -t
我們并不需要動,
后面的test是我們構建的鏡像的名稱,.
代表需要進行構建的代碼的存放位置,這里是.
是因為我當期所在目錄就是/home/test
,并且我的項目的三個文件就位于/home/test
目錄下。
如果我們此時位于其他目錄,當前目錄下沒有要進行鏡像打包的文件,那就需要更改路徑。
比如:
dokcer build -t test /home/test
然后使用dokcer images
可以查看我們已經存在的鏡像
鏡像構建好后,我們就可以拿這個鏡像啟動一個容器
docker run -d -p 8888:80 --name test-image test
- -d 后臺方式運行
- -p 8888:80 端口映射,將宿主的8888端口映射到容器的80端口
- –name 容器名 鏡像名
然后我們可以使用docker ps
查看當前正在運行的容器
并且使用IP地址和端口號訪問當前的項目
注意
上面我們進行了端口映射,那就需要在服務器中開啟要使用的端口,
我們可以在云服務器中的安全組進行設置。
或者使用命令設置
查看已開放端口命令:firewall-cmd –list-all
- 查看防火墻狀態:active (running) 即是開啟狀態
systemctl status firewalld
- 查看已開發端口命令:firewall-cmd –list-all
- 新增防火墻開放端口:
firewall-cmd –zone=public –add-port=3306/tcp –permanent
- 開放端口后需要重新加載防火墻:
firewall-cmd –reload
一些相關指令
如果我們不再需要這個容器和鏡像,
首先需要先停止這個容器,然后在移出容器和鏡像。
首先拿docker ps
找到指定容器的ID,
使用docker stop [ID]
停止容器
docker rm [ID]
移除容器
然后拿docker images
查看已存在的鏡像ID,
使用docker rmi [ID]
移除鏡像
可能我們的docker沒有設置開機啟動:
systemctl start docker # 啟動docker systemctl status docker # 查看docker的運行狀態
一個相關報錯:
關于:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
關于今天使用Docker時報了以下錯誤:
[centos@localhost ~]$ docker ps Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
分析報錯的原因:
報錯的翻譯:無法連接到 unix:///var/run/docker.sock 上的 Docker 守護程序。 docker 守護進程是否正在運行?
通過翻譯完報錯,可以看出報錯的原因是因為docker的服務沒啟動
解決方法:
1、首先啟動docker服務
[root@localhost /]# systemctl start docker
2、查看docker服務當前狀態
[root@localhost /]# systemctl status docker
就此,以上的報錯就成功解決!
開機自啟動Docker
為了避免以上的問題重復出現,可以設置docker開啟自啟動!
[root@localhost /]# systemctl enable docker
后續,我們將使用docker和github actions實現自動化部署。