目標
-
docker 的基本使用命令
-
docker 部署一個靜態網站
-
守護式容器
參考:Docker 容器使用
Docker 的基本使用命令
-
運行一個docker 容器
## 檢查docker 版本 $ docker version Client: # 客戶端 Version: 18.09.7 #版本 API version: 1.39 Go version: go1.10.4 # go語言版本 Git commit: 2d0083d Built: Fri Aug 16 14:19:38 2019 OS/Arch: linux/amd64 Experimental: false Server: # 服務端 Engine: Version: 18.09.7 API version: 1.39 (minimum version 1.12) Go version: go1.10.4 Git commit: 2d0083d Built: Thu Aug 15 15:12:41 2019 OS/Arch: linux/amd64 Experimental: false ## 運行一個應用程序 $ docker run ubuntu:15.10 /bin/echo "Hello world" ## 輸出 Hello world - docker: Docker 的二進制執行文件。 - run: 與前面的 docker 組合來運行一個容器。 - ubuntu:15.10 指定要運行的鏡像,Docker 首先從本地主機上查找鏡像是否存在,如果不存 在, Docker 就會從鏡像倉庫 Docker Hub 下載公共鏡像。 - /bin/echo "Hello world": 在啓動的容器裏執行的命令
注意: 首次運行可能會提示 找不到這個鏡像 ubuntu:15.10 (Unable to find image ‘ubuntu:15.10’ locally)等待下載即可
這個容器啓動後,就不能再接受你的命令操作了。
-
啓動交互式的容器
我們通過 docker 的兩個參數 -i -t,讓 docker 運行的容器實現**“對話”**的能力:
$ docker run -i -t ubuntu:15.10 /bin/bash root@0123ce188bd8:/# ## 或者連寫 -it -t: 在新容器內指定一個僞終端或終端。 -i: 允許你對容器內的標準輸入 (STDIN) 進行交互。 注意第二行 root@0123ce188bd8:/#,此時我們已進入一個 ubuntu15.10 系統的容器 ## 輸入 exit 或者 ctrl+d 來退出容器 root@0123ce188bd8:/# exit exit root@runoob:~# 表示已經退出了
-
啓動後臺模式的容器
$ docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo hello world; sleep 1; done" 2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63 在輸出中,我們沒有看到期望的 "hello world",而是一串長字符 2b1b7a428627c51ab8810d541d759f072b4fc75487eed05812646b8534a2fe63 這個長字符串叫做容器 ID,對每個容器來說都是唯一的,我們可以通過容器 ID 來查看對應的容器發生了什麼。 $ docker ps 查看運行中的容器 root@VM-56-19-ubuntu:/home/ubuntu# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a15c4b7fdbef ubuntu "/bin/bash" 2 days ago Up 47 hours 0.0.0.0:32769->80/tcp web 輸出詳情介紹: CONTAINER ID: 容器 ID。 IMAGE: 使用的鏡像。 COMMAND: 啓動容器時運行的命令。 CREATED: 容器的創建時間。 STATUS: 容器狀態。 狀態有7種: created(已創建) restarting(重啓中) running(運行中) removing(遷移中) paused(暫停) exited(停止) dead(死亡) PORTS: 容器的端口信息和使用的連接類型(tcp\udp)。 NAMES: 自動分配的容器名稱。 # 查看容器內的標準輸出 $ docker logs 容器名稱 或者 容器id 例: $ docker logs a15c4b7fdbef # 停止容器 $ docker stop 容器名稱 或者 容器id
其他命令
# 獲取鏡像,當我們本地沒有的時候
$ docker pull ubuntu
# 查看所有的容器
$ dcoker ps -a
# 啓動一個停止的容器
$ docker start 容器名稱 或者 容器id
# 後臺運行 ,加一個 -d 後臺運行
$ docker run -d
# 停止一個容器
$ docker stop 容器名稱 或者 容器id
# 重新啓動一個容器
$ docker restart 容器名稱 或者 容器id
# 在使用 -d 參數時,容器啓動後會進入後臺。此時想要進入容器,可以通過以下指令進入: 推薦大家使用 docker exec 命令,因爲此退出容器終端,不會導致容器的停止。
$ docker exec 容器名稱 或者 容器id
# 刪除容器
$ docker rm -f 容器名稱 或者 容器id
# 下面的命令可以清理掉所有處於終止狀態的容器
$ docker container prune
# 設置容器的端口映射
通過run命令的兩個方式 一個是 [-P] 大寫的P [-p] 小寫的p
-P 大寫的P ,會將容器的所有端口進行映射
-p 小寫的p ,可以指定容器那些端口可以被映射
四種方式:
containerPort:
只指定容器端口,這種情況下,宿主機的端口是隨機映射的
docker run -p 80 -i -t ubuntu /bin/bash
hostPort:containerPort
同時指定容器端口和宿主機的端口,這種情況下,宿主機的端口和容器端口是對應的
docker run -p 8080:80 -i -t ubuntu /bin/bash
ip::containerPort
指定ip和容器的端口
docker run -p 0.0.0.0:80 -i -t ubuntu /bin/bash
up:hostPort:containerPort
指定ip和宿主機的端口和容器的端口
docker run -p 0.0.0.0:8080:80 -i -t ubuntu /bin/bash
使用docker 部署一個靜態網站
我們想在容器中啓動一個nginx來跳轉到我們的一個靜態頁面上
需要的鏡像 : ubuntu
步驟:
- 啓動一個交互式的容器, 並且指定容器的端口映射爲80
- 安裝nginx
- 安裝vim
- 創建靜態頁頁面
- 修改nginx的配置文件
- 運行nginx
- 驗證網站訪問
# 啓動一個交互式的容器, 並且指定容器的端口映射爲80
# 這裏使用了 -p 來指定容器映射 80 端口,但是宿主機的端口是隨機的
# --name 指定這個容器的名稱是 web1
$ docker run -p 80 --name web1 -it ubuntu /bin/bash
# 進入交互式界面,使用 apt-get 命令安裝 nginx
$ apt-get update #先更新下apt索引
$ apt-get install -y nginx #安裝nginx
$ apt-get install -y vim #安裝vim
# 創建一個靜態的html頁面
$ mkdir -p /var/www/html
$ cd /var/www/html
$ vim ./index.html
插入一下內容
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<h1>hello world!!!</h1>
</body>
</html>
# 修改nginx的配置文件
$ whereis nginx #查找一下nginx
$ vim /etc/nginx/sites-enabled/default
## 將 root 的目錄修改爲 /var/www/html
## 運行nginx
$ nginx
$ ps -ef #查看nginx 是否運行
## 使用ctrl+q 來實現退出 交互式命令行
# 使用docker ps 查看容器
$ docker ps
root@VM-56-19-ubuntu:/home/ubuntu# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cdba03583728 ubuntu "/bin/bash" 29 minutes ago Up 29 minutes 0.0.0.0:32770->80/tcp web1
## 我們會發現容器的 80 端口映射到宿主機的32770端口
## 查看網站是否訪問了
$ curl http://127.0.0.1:32770
## 也可以使用容器的ip 來訪問
# 使用 docker inspect 命令查看容器的信息
$ docker inspect web1
出現:
"IPAddress": "172.17.0.2",
## 使用容器的ip來訪問
$ curl http://172.17.0.2:80