iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 4
7
DevOps

用30天來介紹和使用 Docker系列 第 4

Day4:用簡單的例子來說明如何使用 Docker 指令

昨天我們已經把 Docker 安裝完成,並且也把 Service 執行起來了,今天就用一個簡單的例子來體驗 Docker 的command line要如何操作。

實作目標就是先從 Docker Hub 上把 Ubuntu OS 的 image pull 到 local,有了 image 之後就可以把 Docker container 執行起來,然後進入到 container 裡面安裝和啟動 Apache 的 HTTP Service,並且寫一個有 HelloWorld 字串的 HTML 檔案。最後使用 Browser 連到 Docker Container 裡面的 HTTP Service,確認 HelloWorld 的字串能正常的顯示出來。

我簡單的整理一下,今天要實作的流程如下:

  1. 從 Docker Hub 下載 Docker Image 到 local
  2. 使用 Docker Image 啟動 Docker Container 並進入 Docker Container的terminal
  3. 在 Docker Container 裡面安裝 Apache 的 HTTP Service,並且寫一個 helloworld 的 html 檔
  4. 使用 Browser 連到 helloworld.html 確認 Docker Container 有成功的被啟動起來

實作如下:

一.從 Docker Hub下載 Ubuntu 的 Docker Image 到 local
1.要下載 Docker Image 之前需要先搜尋一下,Docker Image 的 Name 是什麼,指令如下:
指令如下:

$ docker search ubuntu -f is-official=true

is-official=true 表示要搜尋是官方的 Docker image
搜尋結果如下圖
https://ithelp.ithome.com.tw/upload/images/20171207/20103456ocbmfiA8PQ.png

就選擇星星數最多的 Name 為 ubuntu

2.找到了 ubuntu 的 Docker Image Name 之後,就可以把此 image pull 下來,指令如下:

$ docker pull ubuntu

執行結果如下圖
https://ithelp.ithome.com.tw/upload/images/20171207/201034568vl1SG5Qv2.png

3.要再一次確認 ubuntu 的docker image有沒有下載下來,可以使用以下的指令

$ docker images

如下圖
https://ithelp.ithome.com.tw/upload/images/20171207/201034560udrW6Dyyz.png

二. 有了 Docker Image 之後就可以把 container 執行起來了並且進入 Docker Container 的 terminal 裡面,指令如下

$ docker run -it ubuntu /bin/bash 

使用以上的指令就可以進入了docker container 裡面的 terminal
https://ithelp.ithome.com.tw/upload/images/20171207/20103456CqWyfKRWx8.png

可以再打開另外一個terminal視窗,輸入以下指令

$ docker ps -a

確認 docker container 有正常的執行,如下圖:
https://ithelp.ithome.com.tw/upload/images/20171207/201034561JzE5FqXl0.png

在要離開 docker container 的 terminal 時有一個坑。就是如果輸入 exit 指令時,container 會被關閉,如下圖:
https://ithelp.ithome.com.tw/upload/images/20171207/20103456o52mlrYmiA.png

如果不要停止 container 而要退出 docker container 的terminal 需要輸入ctrl + p之後再輸入 ctrl + q 的按鍵,就不會把 container 關閉。

三. 在 docker container 裡面安裝和啟動 apache 的 http service ,指令如下

root@a52350de4ffa:/# apt-get update
root@a52350de4ffa:/# apt-get install -y apache2
root@a52350de4ffa:/# service apache2 start

簡單寫一個 hellowolrd.html檔案放在 /var/www/html 的路徑下,指令如下

root@a52350de4ffa:/# echo "HelloWorld" > /var/www/html/helloworld.html

使用cat /etc/hosts指令查看 docker container 的 IP 如下圖:
https://ithelp.ithome.com.tw/upload/images/20171207/20103456j50XbIp1MV.png

如果想要使用 ifconfig指令,需要安裝 net-tools工具指令如下

root@a52350de4ffa:/# apt-get install -y net-tools

**四. 使用 browser 輸入 http://172.17.0.2/helloworld.html 的 URL 查看 helloworld.html 的檔案是否能正常的顯示,畫面如下: **
https://ithelp.ithome.com.tw/upload/images/20171207/201034568wuJsZIrCL.png

整理一下今天有使用到的 Docker 指令如下:
docker search 搜尋 Docker Image 有哪些的指令
docker pull 指 Docker Image 下載回 local
docker images 顯示出在 local 下載了哪些 Docker Image
docker run 使用 Docker Image 啟動執行 Docker Container
docker ps 顯示了啟動了哪些的 Docker Container

今天主要的目的是要讓大家簡單的來體驗一下 Docker 指令要如何的使用,其實這之間還有很多的細節還沒有被提到,像是要如何撰寫Dockerfile 讓操作更自動化、如何Build image、 container 的網路設定……等等的內容,在未來都還會再提到。


上一篇
Day3: 如何安裝和啟動 Docker
下一篇
Day5: 實作撰寫第一個 Dockerfile
系列文
用30天來介紹和使用 Docker30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
2
rockywang
iT邦新手 5 級 ‧ 2018-11-18 08:42:16

windows 10 上看起來預設是無法直接存取內部 ip 的,需加上 route

route /P add 172.17.0.0 MASK 255.255.255.0 10.0.75.2

看更多先前的回應...收起先前的回應...
sprigga iT邦新手 5 級 ‧ 2019-04-11 10:49:13 檢舉

請問你這是什麼意思?

rockywang iT邦新手 5 級 ‧ 2019-05-01 18:40:18 檢舉

呃,就如字面上的意思,是無法直接存取的,你用 windows 10 試試應該就知道了

st474ddr iT邦新手 2 級 ‧ 2020-03-04 14:14:00 檢舉

rockywang
我已經有下這個指令在Win10 中了
而且他也有顯示位置在持續路由裡了
可是我的還是連不到自己的網站

yangj26952
我也關閉防火牆試試看了 但也沒有用
apache2有成功打開
最近正在學習
碰到這問題卡住

請問大大有沒有其他方法解決

OS:Win10(家用版 沒有Hyper-V)
Docker工具:DockerToolbox-19.03.1

我覺得學習可以先安裝 VirtualBox 或是其它的 VM 工具,然後在上面安裝 Linux 作業系統如 CentOS, 然後記得要把網路設定成 bridge, 之後就可以在 VM 上練習 docker。

因為上面 sample 都是在 linux 上環境做的,所以 windows 的部份我沒有測試過, docker 在 windows 的 support 應該也沒有很完整(我不太確定),所以建議最好要使用 Linux 來練習。

st474ddr iT邦新手 2 級 ‧ 2020-03-11 15:18:56 檢舉

好的
那我去裝VM哈哈

rockywang iT邦新手 5 級 ‧ 2020-03-18 15:39:47 檢舉

我其實是建議直接找台機器裝 linux 練習比較不會碰到一堆奇怪的問題

0
trt0425
iT邦新手 5 級 ‧ 2019-04-20 15:23:17

不好意思 我網站連不進去
都是說連線時間過長

試著把啟動 container的那台機器防火牆關閉看看

1
eric19740521
iT邦新手 1 級 ‧ 2021-01-30 21:48:51

docker run -it ubuntu /bin/bash
這步驟沒問題

root@a52350de4ffa:/# apt-get update
這步驟會產生錯誤...我發覺是docker這邊的時間錯誤.1970年

我嘗試改 date -s ,但系統不讓我改
請問.如何解決

有沒有詳細的錯誤訊息,這樣才能找到問題

我再重新把安裝過程跟問題整理一下,再發問一次??謝謝

ok

0
carlos811009
iT邦新手 5 級 ‧ 2021-08-10 13:51:32

請問大大我也有無法連線應時間過長的問題,我的本機環境是m1 mac pro。
由於我使用了cat /etc/hosts,查出Ip為172.17.0.3,因此我是使用 http://172.17.0.3/helloworld.html
嘗試:
1.將防火牆關閉,也將Chrome的不安全內容設為允許
2.使用Ping 172.17.0.3,查看看是不是docker出問題,預計會出現unreachable,卻是出現Request timeout for icmp_seq 0,但卻沒有連線時間等資訊。

想請問有哪些方向是我可以去思考的解決方向嗎?該如何解決呢?

1
bravesheng
iT邦新手 5 級 ‧ 2022-09-17 10:35:31

在 macOS 上跑 Docker Desktop,需要做 port mapping 才能正常測試 apache:
docker run -p 8000:80 -it ubuntu /bin /bash

0
zuola
iT邦新手 5 級 ‧ 2023-09-06 15:03:00

@yangj26952 不做端口Docker Container的端口映射到Host,就會訪問不到Container里 apache開放的80端口。測試不通,會勸退很多人繼續學習Docker。
所以如果 @yangj26952 還有機會修改這篇文章的話,建議把
docker run -it ubuntu /bin/bash
改為
docker run -p 80:80 -it ubuntu /bin/bash

只需要訪問 http://localhost:80/helloworld.html 就行,訪問 http://127.0.0.1/helloworld.html 也行。

這機就不會訪問 http://172.17.0.2/helloworld.html 沒有響應了。

我要留言

立即登入留言