Previous Article Next Article docker 是一個應用程式虛擬化的東西,可以讓服務快速發佈使用
Posted in Linux

docker 是一個應用程式虛擬化的東西,可以讓服務快速發佈使用

docker 是一個應用程式虛擬化的東西,可以讓服務快速發佈使用 Posted on 2014 年 11 月 15 日Leave a comment

docker 是一個 LXC 技術
docker 是一種應用程式虛擬化
docker 不是虛擬機器
docker 內容物不需要 OS,但還是要有 OS 來跑 docker
docker container 內環境操作方式如同一個實際的 OS
docker 有建議可讓每一種服務(apache/mysql)各包成一個 container 跑,然後串起來
docker 用 dockerfile 記錄 container 過程,可結合版本控制 (git)
docker 用 dockerfile 佈署環境
docker 目前只能在 Linux 上跑

# yum repo

rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

# 安裝 docker

yum install -y docker-io

# 啟動 docker

service docker start

# search 官網上有那些 image 可下載來用 or 瀏覽 https://registry.hub.docker.com/

docker search centos
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
centos The official build of CentOS. 588 [OK]

這個是 cenots7 ,但 cat /etc/issue 內容卻是這樣

\S
Kernel \r on an \m

# 知道名稱(repo-name)後,就從官網下載公開的 container

docker pull centos

# 列出可用的 image,可能是官網 pull 下來的,或是自建的

docker images

# 跑一個新的 container,這個動作每一次都會是一個新的 container
# 其實只要 打 bash 就好,不一定要 /bin/bash

docker run -i -t centos /bin/bash

# 或者
# 用 docker pull centos 時可能會有很多相同的 repo-name,但 tag 及 images id 會不同
# 所以可以根據不同 image id 或 name + tag 打開某個 container

docker run -i -t [repo-name] /bin/bash
docker run -i -t [repo-name:tag-name] /bin/bash
docker run -i -t [image-id] /bin/bash
docker run -i -t centos /bin/bash
docker run -i -t centos:centos6 /bin/bash
docker run -i -t 0c752394b855 /bin/bash

# 重覆以上的動作就是一個新的 container
# 只要從一個 container EXIT 時,這 container 就是 down 了
# container 是沒有所謂的開關機的
# -i 為 保持 stdin 開啟
# -t 為開啟互動提示連線
# bash 為指令
# 此時如果要退出,可按 Ctrl + P 再按 Ctrl + Q 讓它保持背景
# 或用 -d 為 background

# 列出所有已開啟過的 container

docker ps -a

# 以上每 run 一次就會產生一組新 container id
# 假如我要登入同一個,就要先啟動它,如果它是 Exited 的話

docker start [container-id]

# 再來就用 attach 登入一個背景模式的 container,如果它是 UP 時就直接用 attach

docker attach [container-id]

# 只要是 ps -a 列出來的,它的內容還是保留最後的身影,比方說你安裝 httpd 它是還在的
# 如果要永久保留就建立成 images
# 儲存已變更過的 container,永久保留

docker commit [container-id] [new-image-name]:[tag-name]
docker commit xxxxxxxxxxxxxx centos:httpd

# 移除一個已 stop 的 container,後面可接多個 id

docker rm [container-id]

# 刪除 images,但要事先確認 它不會在 ps -a 裡看到

docker rmi [image-id]

# login docker 官網,用於如果要上傳 push 你的 images 至官網

docker login index.docker.io

# 自訂 centos

docker run -i -t centos bash
> yum install -y httpd php mysql-server mysql php-mysql php-mbstring
> exit
docker commit [container-id] centos:httpd

# 就可在 docker images 看到 repo 為 centos 而 TAG 為 httpd
# 然後讓外網 (8888 port) 可以看到 container 的 http 80

docker run -i -t -p 8888:80 centos:httpd bash

Q:
如何從自已的庫 pull container ?
docker container 只能內網 ? 只能用 -p mapping ?
已 run 的 container 如何再綁 port 對外,只能重新 run ?
如何利用 dockerfile 佈署環境 ?
febootstrap 是什麼 ?
為何反覆 attach,會很慢 ?
fig.yml ?

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *