docker學(xué)習(xí)筆記

隨便寫的,按照我覺(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í)間 以及 所占用的空間

docker image ls

構(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容