隨便寫的,按照我覺(jué)得最需要理解和使用的頻率來(lái)決定的
三個(gè)基本概念
- 鏡像(Image)
- 容器(Container)
- 倉(cāng)庫(kù)(Repository)
不給出更多的細(xì)節(jié)解釋,因?yàn)槲乙舱f(shuō)不清
容器和鏡像的關(guān)系就像,類和實(shí)例。
鏡像使用的是分層存儲(chǔ),容器也是如此。每一個(gè)容器運(yùn)行時(shí),是以鏡像為基礎(chǔ)層,在其上創(chuàng)建一個(gè)當(dāng)前容器的存儲(chǔ)層,我們可以稱這個(gè)為容器運(yùn)行時(shí)讀寫而準(zhǔn)備的存儲(chǔ)層為容器存儲(chǔ)層。
容器存儲(chǔ)層的生存周期和容器一樣,容器消亡時(shí),容器存儲(chǔ)層也隨之消亡。因此,任何保存于容器存儲(chǔ)層的信息都會(huì)隨容器刪除而丟失。
最常使用的 Registry 公開服務(wù)是官方的 Docker Hub, 這也是默認(rèn)的 Registry, 并擁有大量的高質(zhì)量的官方鏡像。除此以外,還有 CoreOS 的 Quay.io, CoreOS 相關(guān)的鏡像存儲(chǔ)在這里; Google 的 Google Container Registry, Kubernetes 的鏡像使用的就是這個(gè)服務(wù)。
由于某些原因,在國(guó)內(nèi)訪問(wèn)這些服務(wù)可能會(huì)比較慢。國(guó)內(nèi)的一些云服務(wù)商提供了針對(duì) Docker Hub 的鏡像服務(wù)( Registry Mirror ), 這些鏡像服務(wù)被稱為加速器。常見(jiàn)的有阿里云加速器、DaoCloud 加速器等。
除了使用公開服務(wù)外,用戶還可以在本地搭建私有 Docker Registry。Docker 官方提供了Docker Registry 鏡像,可以直接使用做為私有 Registry 服務(wù)。
docker常用命令
獲取鏡像
docker pull --help
----------------------------------------------------------------------------
Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]
Pull an image or a repository from a registry
Options:
-a, --all-tags Download all tagged images in the repository
--disable-content-trust Skip image verification (default true)
----------------------------------------------------------------------------
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
----------------------------------------------------------------------------
例子
docker pull hub.c.163.com/library/tomcat:latest
docker pull centos:latest
docker pull -a java
----------------------------------------------------------------------------
構(gòu)建鏡像
#以當(dāng)前文件夾的dockerfile來(lái)構(gòu)建名字為name,標(biāo)簽為tag的鏡像,-t表示
docker build -t name:tag .
# 使用URL github.com/creack/docker-firefox 的 Dockerfile 創(chuàng)建鏡像。
$ docker build github.com/creack/docker-firefox
# 也可以通過(guò) -f Dockerfile 文件的位置:
$ docker build -f /path/to/a/Dockerfile .
運(yùn)行鏡像
docker run --help
----------------------------------------------------------------------------
太多了,列取常用的吧
-d: 后臺(tái)運(yùn)行容器,并返回容器ID;
-i: 以交互模式運(yùn)行容器,通常與 -t 同時(shí)使用;-it這樣
-t: 為容器重新分配一個(gè)偽輸入終端,通常與 -i 同時(shí)使用
--rm: 這個(gè)參數(shù)是說(shuō)容器退出后隨之將其刪除。默認(rèn)情況下,為了排障需求,退出的容
器并不會(huì)立即刪除,除非手動(dòng) docker rm;
--name="xxxx": 為容器指定一個(gè)名稱;
-p: 端口映射,格式為:主機(jī)(宿主)端口:容器端口
----------------------------------------------------------------------------
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
----------------------------------------------------------------------------
例子
# 使用docker鏡像nginx:latest以后臺(tái)模式啟動(dòng)一個(gè)容器,并將容器命名為mynginx。
docker run --name mynginx -d nginx:latest
# 使用鏡像 nginx:latest,以后臺(tái)模式啟動(dòng)一個(gè)容器,將容器的 80 端口映射到主機(jī)的 80 端口,主機(jī)的目錄 /data 映射到容器的 /data
docker run -p 80:80 -v /zhuji/data:/data -d nginx:latest
# 使用鏡像nginx:latest以交互模式啟動(dòng)一個(gè)容器,在容器內(nèi)執(zhí)行/bin/bash命令
docker run -it nginx:latest /bin/bash
# 使用鏡像nginx:latest以交互模式啟動(dòng)一個(gè)容器,在容器內(nèi)執(zhí)行/bin/bash命令,退出后刪除
docker run --rm -i -t centos:forsql /bin/bash //運(yùn)行鏡像
#進(jìn)入已經(jīng)允許的容器
sudo docker exec -it 775c7c9ee1e1 /bin/bash
列出鏡像
docker image ls
列表包含了 倉(cāng)庫(kù)名 、 標(biāo)簽 、 鏡像 ID 、 創(chuàng)建時(shí)間 以及 所占用的空間

構(gòu)建dockerfile
# 常用命令說(shuō)明
FROM # 來(lái)自哪個(gè)鏡像基礎(chǔ)構(gòu)建的
RUN # RUN每加一層,就會(huì)大一層,所以如果可以,按照 && 拼接,而不是一個(gè)命令一個(gè)RUN
shell 格式: RUN <命令> , 就像直接在命令行中輸入的命令一樣
eg: RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
exec 格式: RUN ["可執(zhí)行文件", "參數(shù)1", "參數(shù)2"]
eg: RUN tar -xzf redis.tar.gz -C /usr/src/redis --strip-components=1
FROM centos:7
LABEL "CapybaraJ" <capybara@aaa.com>
RUN yum install -y httpd
RUN yum install -y mariadb-server mariadb
EXPOSE 3306
RUN rpm -Uvh https://mirror.webtatic.com/yum/el7/epel-release.rpm \
&& rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
RUN yum install -y php56w.x86_64 php56w-cli.x86_64 php56w-common.x86_64 php56w-gd.x86_64 php56w-ldap.x86_64 php56w-mbstring.x86_64 php56w-mcrypt.x86_64 php56w-mysql.x86_64 php56w-pdo.x86_64
COPY run.sh /root/
RUN chmod 755 /root/run.sh
ADD onethink.tar.gz /var/www/html/
COPY onethink.sql /root/onethink.sql
ADD phpmywind.tar.gz /var/www/html/
COPY phpmywind_db.sql /root/phpmywind_db.sql
#RUN mv /var/www/html/OneThink_v1.0.131129 /var/www/html/onethink
ENTRYPOINT "/root/run.sh"
容器和主機(jī)文件交互
$docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
$docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
#舉例子
docker cp RS-MapReduce 30026605dcfe:/home/cloudera
docker cp 30026605dcfe:/home/cloudera/RS-MapReduce /tmp/
鏡像與容器管理
# 顯示container
docker ps
#刪除container id
docker rm 3ca00
# 刪除所有container
docker rm `docker ps -a -q`
# 刪除鏡像 id
docker rmi 10d1
#刪除所有images
docker rmi `docker images -q`
#刪除所有none的鏡像
docker rmi $(docker images --filter dangling=true -q)
# 同理可用
docker system prune
# 毀滅性的刪除
docker system prune -a
# 類似于Linux上的df命令,用于查看Docker的磁盤使用情況
docker system df