docker 入門指南

安裝 docker

使用 yum 安裝

yum install docker

啓動 docker

systemctl start docker.service

設置開機啓動

systemctl enable docker.service

docker 常用指令

使用 run 創建一個 docker 鏡像

# -i 表示 持續交互輸入,-t 則是選擇一個鏡像文件,/bin/bash 則是表示這個容器提供一個shell交互, --name 指定docker容器的名字,這條指令會我們創建一個擁有最基本功能的centos容器,你可以把它當虛擬機使用
docker run --name first_docker -i -t centos /bin/bash

使用 exit 退出 docker 鏡像,由於這是一個交互式docker容器,所以已退出容器就會停止運行

exit

使用 info 查看 docker 信息

docker info

使用 ps 查看 docker 容器信息

# 查看正在運行的 docker 容器信息
docker ps
# 查看所有 docker 容器信息
docker ps -a

使用 start 啓動 docker 容器,stop 停止 docker 容器,restart 重啓 docker 容器,attach 進入 docker 容器

docker ps -a

# 後面接容器的 id 或者 名字
docker start name/id

docker stop name/id

docker restart name/id

docker attach name/id

創建一個守護進程 docker

# -d 表示進程後臺執行,-c 是執行命令,這裏用了while true,所以表示這個守護進程會在後臺一直執行hello world

docker run --name hello_world -d centos /bin/sh -c "while true;do echo hello world; sleep 1; done"

使用 logs 查看 docker容器日誌, –tail number 可以查看最近幾條日誌, -f 監控日誌, -t 顯示時間戳

docker logs hello_world

docker logs --tail 10 hello_world
# 使用 -t 顯示時間戳,-f 實現監控
docker logs --tail 10 -ft hello_world

使用 top 查看容器內部進程

docker top hello_world

使用 exec 在容器內部運行新進程

# 運行後臺任務
docker exec -d first_docker mkdir test
# 進行交互命令, 創建 TTY 捕捉 STDIN
docker exec -t -i hello_world /bin/bash

使用 inspect 查看容器詳細信息

docker inspect hello_world

使用 rm 來刪除容器,刪除之前需要先停止容器的運行

docker rm hello_world

使用 images 列出鏡像

docker images

使用 pull 拉取 倉庫鏡像,鏡像之間使用 tag 來區分

# 拉取 centos 倉庫的所有鏡像
docker pull centos

使用 search 查詢倉庫鏡像

docker search centos

使用 commit 提交鏡像 (不推薦)

# id/name 是容器,repository是倉庫,tag是標籤
docker commit id/name repository:tag

使用 rmi 刪除鏡像

# image_name 是鏡像名
docker rmi image_name

使用 dockerfile 構建文件 和 build 指令創建鏡像 (推薦,便於調試錯誤)

# 構建文件詳解,注意所有的構建指令必須大寫,如FROM,RUN
# 使用#來進行註解
#Version: 0.0.1
# From 表示使用什麼鏡像進行基礎構建
From centos
# MAINTAINER 表示作者的基本信息
MAINTAINER Yiyang Zeng "[email protected]"
# Run 表示針對基本的鏡像在執行指令進行拓展,比如這裏就是導入的兩個包,可以使用wget指令
Run yum -y install iproute
Run yum -y install wget
# 開發的端口
EXPOSE 80

# -f 是構建文件的路徑,-t 是鏡像文件的倉庫以及標籤信息,不要忘記最後還有一個小點
docker build -f ./my_centos -t zyy/centos:first .

使用 history 查看鏡像的創建過程

# image_id 是鏡像的ID
docker history image_id

run 指令中使用 -p 來綁定端口

# 宿主機的 9527 綁定 容器的80,不指定宿主機,則會在 49153-65535 之間進行隨機選擇
docker run --name first_build -p 9527:80 -t -i e2906ce60fb1 /bin/bash

使用 port 查看容器端口情況

docker port first_build

使用 push 將鏡像上傳到 docker hub

# zyy2404 是 docker hub 的用戶名,沒有要求註冊
docker push zyy2404/centos:first

問題:推送過程可能會不成功即出現下面這種情況getsocket:connection refused.

vi /etc/docker/daemon.json
# 根據registry的ip地址
增加"insecure-registries": ["192.168.56.101:5000"]

查看倉庫擁有的鏡像

使用 瀏覽器訪問 http://:5000/v2/_catalog

DockerFile指令

使用 CMD 來指定容器啓動時的指令,和 RUN 的區別在於一個是啓動,一個是構建

# 執行 start,run 指令時會進入shell交互,
CMD ["/bin/bash"]

# 執行 CMD 中的 /bin/bash 進入命令行
docker run --name second_docker -t -i centos

# CMD 和 run指定的命令互斥,此時不會執行CMD的命令,所以只會執行 /bin/ps
docker run --name second_docker -t -i centos /bin/ps

使用 ENTRYPOINT 來指定啓動時指令,和 CMD 不同的是,它不會被 run 覆蓋,除非 run 使用了 --entrypoint

# 例子: 使用 java -jar 啓動一個 java 工程,注意這種路徑不是容器中的路徑,只是爲了代表一個絕對路徑
ENTRYPOINT["/home/zyy/app/jdk1.8.0_144/bin/java","-jar","/home/zyy/app/CALS.jar"]

# 可以和run結合使用
ENTRYPOINT["/home/zyy/app/jdk1.8.0_144/bin/java"]
docker run --name first_java -t -i cals -jar /home/zyy/app/CALS.jar

# 可以和 CMD 結合使用
ENTRYPOINT["/home/zyy/app/jdk1.8.0_144/bin/java"]
CMD["-jar","/home/zyy/app/CALS.jar"]

使用 WORKDIR 設置工作目錄

# 設置當前工作目錄,相當於 cd
WORKDIR /var/log

# run 也可以達到同樣的效果
docker run --name first_java -t -i cals -w /var/log pwd

使用 ENV 設置環境變量

# 比如設置 jdk 的環境變量
ENV JAVA_HOME /home/zyy/app/jdk1.8.0_144/bin/java

# 在構建過程中,往後可以使用這個環境變量
ENTRYPOINT[$JAVA_HOME]

使用 USER 指定用戶

USER zyy
USER user:group

# docker run 也可以指定
run -u zyy

使用 VOLUMN 來向基於鏡像創建的容器添加捲

# 可以添加多個卷
VOLUMN["/opt/project","/data"]

使用 ADD 從構造環境目錄複製文件到容器中

# 如果文件是歸檔文件,還會進行解壓
ADD test_add.txt /home/zyy

使用 COPY 也可以複製,不同在於不會進行解壓和提取

COPY test_add.txt /home/zyy

使用 ONBUILD 來設置觸發器,也就是當它被用作基礎鏡像時,在 FROM 之後會執行觸發器的命令

ONBUILD RUN yum -y install wget
ONBUILD JAVA_HOME /home/zyy/app/jdk1.8.0_144/bin/java

創建 Docker Registry

可以直接使用docker提供的開源鏡像 registry

docker run -p 5000:5000 registry

更改 tag

docker tag 7b645f38ac65 ip:5000/zyy2404/centos:first

pushregistry

docker push ip:5000/zyy2404/centos:first

dockerfile 實例

使用 dockerfile 生成 redis 容器

#Version: 0.0.1
FROM centos
MAINTAINER Yiyang Zeng "[email protected]"
#RUN yum -y update
RUN mkdir redis
WORKDIR /redis
RUN yum -y install wget gcc make
# 注意這裏需要在dockerfile 目錄放置要複製的配置文件
ADD redis.conf /redis/redis.conf
RUN wget http://download.redis.io/releases/redis-5.0.3.tar.gz
RUN tar -axvf redis-5.0.3.tar.gz
WORKDIR /redis/redis-5.0.3
RUN make && make install
EXPOSE 6379
ENTRYPOINT ["/usr/local/bin/redis-server"]



docker run --name first_redis -p 5555:6379 878c9ac5369f /redis/redis.conf

使用 dockerfile 生成 python 容器

#Version: 0.0.1
FROM centos
MAINTAINER Yiyang Zeng "[email protected]"
RUN mkdir python
WORKDIR /python
RUN yum -y update
RUN yum -y install wget
RUN wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tgz
RUN tar -axvf Python-3.6.0.tgz
RUN yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel make gcc-c++ gcc
WORKDIR /python/Python-3.6.0
RUN ./configure --prefix=/usr/local && make -j 4 && make install
EXPOSE 22


docker run --name first_python -p 7777:22 -t -i 01f219235679 /bin/bash
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章