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 ubuntu14.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 docker_user@email.com

#镜像的操作指令     每运行一次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

 

posted @ 2017-09-21 16:52  gaojy  阅读(248)  评论(0编辑  收藏  举报