[取得映像檔]
先從Docker Hub下載作業系統的映像檔
這裡的範例是Ubuntu 16.04映像檔
sudo docker pull ubuntu:16.04
完成之後就可以使用了
接下來就可以建立container使用
sudo docker run -t -i ubuntu:16.04 /bin/bash
root@39a3293ebf91:/#
[列出映像檔]
列出本機上所有的映像檔
sudo docker images
ubuntu:16.04
橘色的部分是映像檔名稱
藍色的部分是TAG名稱
如果沒有指定TAG,則會選擇預設latest
[修改映像檔]
root@39a3293ebf91:/# apt-get update
exit
sudo docker commit -m "apt get update" -a "dockerP" 39a3293ebf91 pardoununtu/init:v1
之後就會產出新的映像檔id 5322e16a31ce99cff7bb510badc5857246cb5785a985362d6418c232c74b32f3
然後就可以使用新的映像檔來開啟container
sudo docker run -t -i pardoubuntu/init:v1 /bin/bash
root@a9ff5f4d3d6d:/#
[Dockerfile]
建立一個新目錄和Dockerfile
$ mkdir pardo
$ cd pardo
$ touch Dockerfile
以下是 LNMP 的 Dockerfile
FROM ubuntu:18.04 |
RUN apt-get update |
RUN apt-get upgrade -y |
RUN apt-get install -y curl |
RUN apt-get install -y apt-utils |
RUN apt-get install -y build-essential |
RUN DEBIAN_FRONTEND=noninteractive |
RUN apt-get install -y tzdata |
RUN apt-get install -y git npm |
RUN apt-get install -y php-pear php7.2-curl php7.2-dev php7.2-gd php7.2-mbstring php7.2-zip php7.2-mysql php7.2-xml php7.2-fpm |
RUN apt-get install -y php7.2 |
RUN apt-get install -y nginx |
RUN apt-get install -y mysql-server |
RUN apt-get install -y beanstalkd |
RUN php -r "readfile('https://getcomposer.org/installer');" | php |
RUN mv composer.phar /usr/local/bin/composer |
Dockerfile的基本語法
# 是註解
FROM 是告訴Docker要以哪個映像檔為基底
RUN 是執行的指令
完成後 使用 docker build 來建立映像檔
$ sudo docker build -t="pardocch/lnmp" .
其中的 -t 標記tag。 . 是Dockerfile所在路徑(當前目錄)
可以看到 build 指令後執行的操作。它要做的第一件事情就是上傳這個 Dockerfile 內容,因為所有的操作都要依據 Dockerfile 來進行。 然後,Dockerfile 中的指令被一條一條的執行。每一步都建立了一個新的container,在容器中執行指令並提交修改(就跟 docker commit
一樣)。當所有的指令都執行完畢之後,返回了最終的映像檔 id。所有的中間步驟所產生的container都會被刪除和清理。
現在可以利用新建立的映像檔產生一個新的container
sudo docker run -t -i pardocch/lnmp /bin/bash
還可以使用 docker tag 來修改映像檔標籤
sudo docker tag container_id repository:newtag
[上傳映像檔]
首先,先登入docker hub
sudo docker login
輸入完帳號密碼後,在docker hub建立一個repository
sudo docker tag local-image:tagname new-repo:tagname
sudo docker push new-repo:tagname
[新建啟動Container]
sudo docker run -t -i pardocch/lnmp /bin/bash
如果要分配port
sudo docker run -idt -p 80:80 pardocch/lnmp
-d 是指再背景執行
打 sudo docker ps -a 會發現這個container的狀態已經從 Exit XX ago 變成 UP XX minute
如果是想要啟動已經有的container
則打 sudo docker start container_NAMES
進入container sudo docker exec -it container_ID /bin/bash
[Docker Volume]
sudo docker run -it -v /home/pardo/www:/var/www/html pardocch/lnmp /bin/bash
/home/pardo/www 是實體上的路徑
/var/www/html 是docker container裡面的路徑
pardocch/lnmp 是image
/bin/bash 是執行指令
參考網站1: https://philipzheng.gitbooks.io/docker_practice/content/
參考資料2: https://ithelp.ithome.com.tw/articles/10192397