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