前言:
先提醒一下最容易忘記的,確保使用的防火牆端口已開啟;
需要實現的功能:
- 使用docker啟動nginx服務
- docker開機自啟動
- nginx服務開機自啟動
這樣就不用因為服務器掛掉每次都手動重啟服務了
環境:
服務器:目前使用的是三·豐·雲免費雲服務器(另外有免費虛擬主機,免備案服務),前面在服務器上試着跑了一個nignx和兩個node服務,訪問基本沒啥壓力,1G的內存還是夠夠的,當然,如果是線上項目需要,像搭建博客,個人覺得2G的內存會更合適一點。
容器:docker
鏡像:nginx
安裝docker
curl -sSL https://get.daocloud.io/docker | sh
運行docker
systemctl start docker
如果不運行docker,直接執行后面的操作會報錯:
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
設置開啟啟動docker;不然每次重啟主機還得手動運行docker
systemctl enable docker
參數:
enable:自啟動; disable:禁止自啟動
拉取nignx鏡像
docker pull nginx
查看本地鏡像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest c919045c4c2b 42 hours ago 141MB
運行鏡像
docker run --name nginx-test -p 8003:80 -d nginx
參數說明:
- --name nginx-test:容器名稱。
- -p 8003:80: 端口進行映射,將本地 8003 端口映射到容器內部的 80 端口。
- -d nginx: 設置容器在在后台一直運行。
訪問nginx
踩坑:如果發現訪問不到,頁面一直打不開,可以排除以下原因
- 防火牆端口是否開啟
常用命令:
查看防火牆開啟的端口命令:
firewall-cmd --list-ports
開啟端口8003(還需執行下面重啟命令才能生效)
firewall-cmd --zone=public --add-port=8003/tcp --permanent
重啟
firewall-cmd --reload
2. nginx配置是否正確,一般不用配置,默認80端口可以直接訪問
查看容器:
docker ps -a
-a可以查看所有容器,去掉-a只顯示正在運行的容器
刪除容器:需要指定container ID<容器 ID>
docker rm -f 1e560fca3906
停止容器:
docker stop <容器 ID>
啟動停止的容器:
docker start <容器 ID>
啟動並進入容器:
docker run -it nginx /bin/bash
參數說明:
- -i: 交互式操作。
- -t: 終端。
- nginx: nginx 鏡像。
- /bin/bash:放在鏡像名后的是命令,這里我們希望有個交互式 Shell,因此用的是 /bin/bash。
exit退出容器會停止運行
進入已運行的容器:
docker exec -it <容器 ID> /bin/bash
推薦使用:docker exec進入容器,使用exit退出容器不會停止; docker attach <容器 ID>進入容器,使用exit退出容器會停止
退出容器:
exit
設置容器開機自動重啟(需要重啟docker才能生效哦)
// 啟動容器
docker run --restart=always --name nginx-test -p 8003:80 -d nginx
systemctl restart docker
或者
// 更新已啟動的容器
docker container update --restart=always <容器ID>
systemctl restart docker
最后:容器自啟動遇到一個小坑,設置了--restart=always,但是重啟服務器之后,發現docker並沒有自啟動nginx服務,最后才發現是需要手動重啟下docker。