Docker 入門學習
初識docker
docker在開發和運維中的優勢:
1)更快速的交付和部署
2)更高效的資源利用
3)更輕松的遷移和擴展
4)更簡單的更新管理
docker與虛擬機的比較
docker的核心概念和安裝
docker鏡像:鏡像(image)是創建docker容器的基礎,類似於虛擬機鏡像,一個面向docker引擎的只讀模板,包含了文件系統。
docker容器:(container)類似於一個輕量級的沙箱,Docker利用容器來運行和隔離應用.可以看做一個簡易版得到liux系統。可以對容器進行啟動,開始,停止,刪除。
docker倉庫:docker倉庫類似於代碼庫,是docker集中存放鏡像的文件場所。
鏡像
獲取鏡像
$sudo docker pull NAME[:TAG] 不顯式指定tag號,默認使用latest標簽。 e.g. $ sudo docker pull ubuntu: 14.04
指定倉庫下載鏡像並啟動容器:$ sudo docker pull dl.dockerpool.com:5000/ubuntu $ sudo docker run -t -i ubuntu /bin/bash
查看鏡像信息
查看本地鏡像信息:$ sudo docker images
修改本地鏡像標簽:$ sudo docker tag dl.dockerpool.com:5000/ubuntu:latest ubuntu:latest
獲取鏡像的詳細信息,以JSON返回:$ sudo docker inspect 5506de2b643b inspect後面+鏡像ID
搜尋鏡像
用 docker search 命令可以搜索遠端倉庫中共享的鏡像,默認搜索 Docker Hub 官
方倉庫中的鏡像。用法為 docker search TERM 。
刪除鏡像
使用鏡像標簽刪除鏡像
$ sudo docker rmi dl.dockerpool.com:5000/ubuntu
註意:當同一個鏡像擁有多個標簽的時候, docker rmi 命令只是刪除了該鏡像多個標簽中的指定
標簽而已,並不影響鏡像文件。但當鏡像只剩下一個標簽的時候就要小心了,此時再使用 docker rmi 命令會徹底刪
除該鏡像 。
創建鏡像
基於已有鏡像的容器創建
命令格式為 docker commit [OPTIONS]
CONTAINER [REPOSITORY[:TAG]],主要選項包括:
-a, --author="" 作者信息。
-m, --message="" 提交消息。
-p, --pause=true 提交時暫停容器運行。
e.g. $ sudo docker commit -m "Added a new file" -a "Docker Newbee" a925cb40b3f0 test 其中a925cb40b3f0 為容器ID
基於本地模板導入
$ sudo cat ubuntu-14.04-x86_64-minimal.tar.gz |docker import - ubuntu:14.04
基於dockerfile
存出和載入鏡像
可以使用 docker save 和 docker load 命令來存出和載入鏡像。
上傳鏡像
$ sudo docker tag test:latest user/test:latest
$ sudo docker push user/test:latest
容器
新建容器
Sudo Docker create -it ubuntu:latest
Sudo docker start 容器ID
啟動容器
Sudo docker run -t -i ubuntu /bin/bash
Ctrl+p ctrl+q 後臺運行 exit 退出
守護態運行
Sudo docker logs 容器ID
終止容器
Sudo docker stop/restart/start 容器ID
進入容器
刪除容器
-f
數據管理
數據卷
數據卷容器
1)創建一個數據卷容器dbdate 然後創建一個數據卷掛載到 /dbdata
數據備份
網絡基礎配置
使用dockerfile創建鏡像
Dockerfile是一個文本格式的配置文件,用戶可以使用Dockerfile快速創建自定義的鏡像。
基礎結構
一般而言,dockerfile分為字部分:基礎鏡像信息,維護者信息,鏡像操作指令和容器啟動時執行指令。 # This dockerfile uses the ubuntu image #VERSION 2 - EDITION 1 #Author:docker_user #Command format: Instruction [arguments/command] #第一行必須指定基礎鏡像 FROM shc-harbor-dev.hpeswlab.net/itsma/itom-itsma-opensuse-base:2017.04.26 #維護者信息 MAINTAINER docker_user [email protected] #鏡像的操作指令 每運行一次RUN命令,鏡像添加新的一層,並提交。 RUN echo "deb http:// archive.ubuntu.com" >> /etc/apt/sources.list RUN apt-get update && apt-get install -y nginx RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf #容器啟動時執行指令 CMD /usr/sbin/nginx
指令
1.FROM
第一條指令必須為FROM指令。如果同個Dockerfile中創建多個鏡像,可以使用多個FROM指令。
格式FROM <image> 或 FROM <image>:<tag>
2.MAINTAINER
格式為 MAINTAINER <name>,指定維護者信息。
3.RUN
格式為RUN <command>
每條RUN指令將在當前鏡像基礎上執行命令,並提交為新的鏡像。當命令較長時可以使用\來換行。
4.CMD
CMD 指令的格式和 RUN 相似,也是兩種格式:
- shell 格式:CMD <命令>
- exec 格式:CMD ["可執行文件", "參數1", "參數2"...]
- 參數列表格式:CMD ["參數1", "參數2"...]。在指定了 ENTRYPOINT 指令後,用 CMD 指定具體的參數。
5.EXPOSE
告訴docker服務端容器暴露的端口號,供互聯系統使用。使用-p指定主機端口映射。
EXPOSE 22 80 8443
docker run -d -p 127.0.0.1:33301:22 centos6-ssh
6.ENV
格式為ENV <key> <value>
指定環境變量
7.ADD
格式ADD <src> <dest>
該命令將復制指定的<src>到容器的<dest>.其中<src>可以是Dockerfile所在目錄的一個相對路徑(文件和目錄);也可以是URL。
8.COPY
格式為COPY <src> <dest>
復制本地主機的<src>至 容器<dest>,目標路徑不存在時會自動創建。當使用本地目錄為源目錄時,推薦使用COPY。
9.ENTRYPOINT
container啟動時執行的命令,但是一個Dockerfile中只能有一條ENTRYPOINT命令,如果多條,則只執行最後一條
ENTRYPOINT沒有CMD的可替換特性。
10.VOLUME
可以將本地文件夾或者其他container的文件夾掛載到container中。
VOLUME ["/data1","/data2"]
11.USER
格式為USER daemon
指定運行容器時的用戶名或UID,後續的RUN也會使用指定用戶。
12.WORKDIR
格式為WORKDIR /path/to/workdir
切換目錄用,可以多次切換(相當於cd命令),對RUN,CMD,ENTRYPOINT生效
WORKDIR /a
WORKDIR b
WORKDIR c
最終:/a/b/c
13.ONBUILD
格式為ONBUILD [ INSTRUCTION]
ONBUILD 指定的命令在構建鏡像時並不執行,而是在它的子鏡像中執行.當創建的鏡像作為基礎鏡像時所執行的操作指令。
創建鏡像
docker build[選項] 路徑
指定dockerfile所在路徑為/tmp/docker_buider/ ,並且希望 生成鏡像標簽為build_repo/first_image :
$sudo docker build -t build_repo/first_image /tmp/docker_builder/
e.g. Dockerfile
FROM shc-harbor-dev.hpeswlab.net/itsma/itom-itsma-opensuse-base:2017.04.26
# set proxy
ENV http_proxy @{http.proxy}
#install wget
RUN zypper --non-interactive install wget tar && zypper clean
# install Nodejs 6.91
RUN wget http://nodejs.org/dist/v6.9.1/node-v6.9.1-linux-x64.tar.gz -P /app && tar -vzxf /app/node-v6.9.1-linux-x64.tar.gz -C /app && rm -rf /app/node-v6.9.1-linux-x64.tar.gz
#set node environment
ENV NODE_HOME /app/node-v6.9.1-linux-x64/bin
ENV PATH $NODE_HOME:$PATH
ENV http_proxy ""
RUN mkdir -p /pv/itsma/conf /app/yaml_output /app/config-service/yamls /itsma-certificate/upload /itsma-certificate/bundle
COPY configure-ui.tar.gz /app/
#COPY smarta-admin-ui.tar.gz /app/
COPY configure-backend.jar /app/config-service/configure-backend.jar
#COPY /var/vols/itom/core/suite-install/itsma/services/sm/*.yaml /app/config-service/yamls/
COPY configmap_property.json /app/yaml_output
COPY sm-post-pod.yaml /app/config-service/yamls/
COPY run.sh /app
COPY ssl.sh /app
RUN tar -C /app -xzf /app/configure-ui.tar.gz && rm -rf /app/configure-ui.tar.gz && chmod 500 /app/run.sh && chmod 755 /app/ssl.sh
# copy smart admin page
#RUN cp /app/smarta-admin-ui/* /app/configure-ui/dist/
# for security
RUN groupadd itsma_config -g 1999 && useradd itsma_config -u 1999 -g 1999 && chown -R itsma_config:itsma_config /app && echo "root:bmVlZGNoYW5nZWQ=" | chpasswd && echo "itsma_config ALL=NOPASSWD: /usr/bin/ln" >> /etc/sudoers
EXPOSE 8080
WORKDIR /app
USER itsma_config
CMD ["/app/run.sh"]
View Code
Docker 入門學習