隨便寫的傻昙,按照我覺得最需要理解和使用的頻率來決定的
三個基本概念
- 鏡像(Image)
- 容器(Container)
- 倉庫(Repository)
不給出更多的細(xì)節(jié)解釋宛琅,因為我也說不清
容器和鏡像的關(guān)系就像,類和實例描姚。
鏡像使用的是分層存儲,容器也是如此。每一個容器運行時,是以鏡像為基礎(chǔ)層,在其上創(chuàng)建一個當(dāng)前容器的存儲層,我們可以稱這個為容器運行時讀寫而準(zhǔn)備的存儲層為容器存儲層。
容器存儲層的生存周期和容器一樣,容器消亡時,容器存儲層也隨之消亡洒闸。因此,任何保存于容器存儲層的信息都會隨容器刪除而丟失。
最常使用的 Registry 公開服務(wù)是官方的 Docker Hub, 這也是默認(rèn)的 Registry, 并擁有大量的高質(zhì)量的官方鏡像均芽。除此以外,還有 CoreOS 的 Quay.io, CoreOS 相關(guān)的鏡像存儲在這里; Google 的 Google Container Registry, Kubernetes 的鏡像使用的就是這個服務(wù)丘逸。
由于某些原因,在國內(nèi)訪問這些服務(wù)可能會比較慢。國內(nèi)的一些云服務(wù)商提供了針對 Docker Hub 的鏡像服務(wù)( Registry Mirror ), 這些鏡像服務(wù)被稱為加速器掀宋。常見的有阿里云加速器深纲、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來構(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
# 也可以通過 -f Dockerfile 文件的位置:
$ docker build -f /path/to/a/Dockerfile .
運行鏡像
docker run --help
----------------------------------------------------------------------------
太多了,列取常用的吧
-d: 后臺運行容器唆途,并返回容器ID富雅;
-i: 以交互模式運行容器,通常與 -t 同時使用肛搬;-it這樣
-t: 為容器重新分配一個偽輸入終端没佑,通常與 -i 同時使用
--rm: 這個參數(shù)是說容器退出后隨之將其刪除。默認(rèn)情況下,為了排障需求,退出的容
器并不會立即刪除,除非手動 docker rm温赔;
--name="xxxx": 為容器指定一個名稱蛤奢;
-p: 端口映射,格式為:主機(宿主)端口:容器端口
----------------------------------------------------------------------------
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
----------------------------------------------------------------------------
例子
# 使用docker鏡像nginx:latest以后臺模式啟動一個容器,并將容器命名為mynginx陶贼。
docker run --name mynginx -d nginx:latest
# 使用鏡像 nginx:latest啤贩,以后臺模式啟動一個容器,將容器的 80 端口映射到主機的 80 端口,主機的目錄 /data 映射到容器的 /data
docker run -p 80:80 -v /zhuji/data:/data -d nginx:latest
# 使用鏡像nginx:latest以交互模式啟動一個容器,在容器內(nèi)執(zhí)行/bin/bash命令
docker run -it nginx:latest /bin/bash
# 使用鏡像nginx:latest以交互模式啟動一個容器,在容器內(nèi)執(zhí)行/bin/bash命令,退出后刪除
docker run --rm -i -t centos:forsql /bin/bash //運行鏡像
#進(jìn)入已經(jīng)允許的容器
sudo docker exec -it 775c7c9ee1e1 /bin/bash
列出鏡像
docker image ls
列表包含了 倉庫名 拜秧、 標(biāo)簽 痹屹、 鏡像 ID 、 創(chuàng)建時間 以及 所占用的空間
構(gòu)建dockerfile
# 常用命令說明
FROM # 來自哪個鏡像基礎(chǔ)構(gòu)建的
RUN # RUN每加一層枉氮,就會大一層志衍,所以如果可以暖庄,按照 && 拼接,而不是一個命令一個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"
容器和主機文件交互
$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