Docker 简明笔记

来源:互联网 发布:淘宝关键词采集 编辑:程序博客网 时间:2024/06/05 01:54

Docker 简明笔记

原理

  • 利用 docker run 来创建容器时,Docker 在后台运行的标准操作包括:
    检查本地是否存在指定的镜像,不存在就从公有仓库下载
    利用镜像创建并启动一个容器
    分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
    从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
    从地址池配置一个 ip 地址给容器
    执行用户指定的应用程序
    执行完毕后容器被终止

基本命令

  • docker version
    查看docker的属性
  • docker info
    查看docker系统层面信息
  • docker search ubuntu16.04
    搜索镜像
  • docker pull ubuntu
    下载镜像
  • docker run ubuntu /bin/echo hello world
    run使用镜像
  • docker run -i -t ubuntu /bin/bash
    交互使用镜像
  • docker run -d ubuntu /bin/bash -c “while true;do echo hello world;sleep 1;done”
    以守护态(Daemonized)形式运行
  • docker logs CONTAINER_ID
    查看容器的运行
  • docker ps
    查看新镜像
  • sudo docker images # 查看镜像相关信息
  • sudo docker history {image id} # 查看镜像的操作历史
    操作新镜像
  • sudo docker run -d -p 80 –name suibianquming chen/wodedaoke nginx -g “daemon off;”
  • sudo docker ps -l
  • sudo docker port f59e8ccb6f21 80
  • sudo docker run -d -p 127.0.0.1:33222:80 –name ceshiduankou chen/wodedaoke nginx -g “daemon off;”

扩展阅读

查看依赖:

uname   -a

需要满足64位操作系统,内核版本2.8以上。

ls  -l  /sys/class/misc/device-mapper

或者

sudo    grep    device-mapper   /proc/devices

显示device-mapper的相关状态。

docker安装

gpg --keyserver pgpkeys.mit.edu --recv-key  9AA38DCD55BE302Bsudo    apt-get updatesudo    apt-get install docker-enginesudo    apt-get install docker-engine   --fix-missing

docker与防火墙

将/etc/default/ufw文件改换:

DEFAULT_FORWARD_POLICY="DROP"

改为

DEFAULT_FORWARD_POLICY="ACCEPT"

然后

sudo    ufw reload docker

使用sudo docker run -i -t ubuntu /bin/bash #-i 交互 -t 创建 tty 伪终端

# 如果本地没有这个镜像, docker 会从官方指定的源下载该镜像。sudo    docker  run --name  bob_the_container   -i  -t  ubuntu  /bin/bash               # 取一个名字     sudo    docker  start   bob_the_containersudo    docker  start   11b5de36fcb8sudo    docker  attach  bob_the_container               # 重新附着到该容器的会话上。sudo    docker  run --name  daemon_dave     -d  ubuntu  /bin/sh -c  "while  true;   do  echo    hello   world;  sleep   1;  done"               #-d 表示以守护进程的模式进行启动。sudo    docker  logs    daemon_davesudo    docker  logs    -ft daemon_davesudo    docker  logs    --tail  10  daemon_davesudo    docker  run --log-driver="syslog"   --name  daemon_dwayne   -d  ubuntu  /bin/sh -c  "while  true;   do  echo    hello   world;  sleep   1;  done"               # 会禁用 docker     的 log 功能并将 log 自动导出到 Syslogsudo    docker  top daemon_davesudo    docker  stats   daemon_davesudo    docker  exec    -d  daemon_dave touch   /tmp/temptfile              # 额外启动新进程sudo    docker  stop    daemon_davedocker  ps  -n  2               # 显示最后两个容器sudo    docker  run --restart=always    --name  daemon_dave -d  ubuntu  /bin/sh -c  "while  true;   do  echo hello  world;  sleep   1;  done"               #restart 的判断模式还可设置为 on-failure:5sudo    docker  inspect daemon_davesudo    docker  rm  11b5de36fcb8sudo    docker  rm  `sudo   docker  ps  -a  -q`             #-q 表示只返回容器的 IDsudo    docker  pull    fedora:21sudo    docker  search  puppetsudo    docker  pull    jamtur01/puppetmastersudo    docker  images  fedorasudo    docker  pause   container_name

docker深入

当一个容器启动后,它会被移到内存中,而引导文件系统则会被卸载,以留出更多内存提供给initrd镜像用。
联合加载技术
bootfs; rootfs
写时复制;镜像分层框架

用Dockerfile构建镜像

在test文件夹中touch一个文件Dockerfile。内容如下:

#versionFROM    ubuntuMAINTAINER  james   turnbull    "chen@email.com"RUN apt-get update  &&  apt-get install -y  nginxRUN echo    'hi,    im  in  your    container'  >/usr/share/nginx/html/index.htmlRUN ["apt-get", "install",  "-y",   "sdcv"]EXPOSE  80Dockerfile指令RUN             # 指定镜像被构建时候要运行的命令CMD             # 容器启动时候运行的命令CMD ["/bin/bash",   "-l"]# 命令行中的指令会覆盖 Dockerfile 中的 CMD 指令# 在 Dockerfile 中只能指定一条 CMD 指令ENTRYPOINT  ["/usr/sbin/nginx"]             # 同 CMD ,在容器启动的时候运行WORKDIR /opt/webapp/dbENV RVM_PATH    /home/rvm       RVM_ARCHFLAGS="-arch    i386"       # 这个新的环境变量可以在后面的任何 RUN 指令中使用。ENV TARGET_DIR  /opt/appWORKDIR $TARGET_DIR# 也有命令行用 -e 传递环境变量。如: sudo  docker  run -it -e  "WEB_PORT=8080" ubuntu  envUSER    nginx:group             # 用 nginx 用戶的身份运行。可以在命令行中用 -e 进行覆盖。VOLUME  ["/opt/project"]                # 这条指令会为基于这个镜像的任何容器创建一个文件夹ADD   sourcepath/file targetpath/file             # 会将外部环境下的当前目录下对应的文件复制到镜像中对应的路径。路径也可用 URL 作为文件源。ADD http://wordpress.org/latest.zip /root/wordpress.zip  # 小魔法:归档文件指定为源文件,在目的路径会自动解压。也会自动创建对应的全路径。COPY    conf.d/ /etc/apache2                # 同 ADD 。只是复制。LABEL   label="value"               # 键值对的形式进行展现。可用 docker  inspect  进行查看。STOPSIGNAL  SIGKILL             # 设置停止容器时发送什么系统调用信号给容器。信号必须合法。ARG build   webapp_user=user                # 构建时采用 --build-arg. 运行 docker  build   --build-arg build=1234  -t  chen/images_nameONBUILD ADD .   /app/src    # 创建一个触发器。当一个镜像被用作其他镜像的基础镜像时,该触发器会被执行。这些指令是紧    跟在 FROM 之后的。可通过 docker inspect image 或container 进行查看。

如何理解ENTRYPOINT:

在Dockerfile中ENTRYPOINT一个命令,如果外部命令行进行一个操作(该操作和原操作冲突),则该操作不会执行。如果文件内部ENTRYPOINT的命令没有参数,则外部命令行的参数可作为内部命令的参数。

一次网站的搭建

可以直接运行我的dockernginx.sh脚本。或者代码如下:

#!/bin/bash#auth   cheng#date   2017-7-26#install    a   website with    a   docker.sudo    docker  pull    ubuntucd  ~mkdir   test/sample -pcd  test/samplemkdir   nginx   &&  cd  nginxwget    https://raw.githubusercontent.com/jamtur01/dockerbook-code/             master/code/5/sample/nginx/global.confwget    https://raw.githubusercontent.com/jamtur01/dockerbook-code/             master/code/5/sample/nginx/nginx.confwrite_dockerfile()cd  ..sudo    docker  build   -t  ubuntu  .images_id   =   $(sudodockerimages|grepubuntu|awk'{print$3}')sudo    docker  history $images_idmkdir    website &&  cd  websitewget    https://raw.githubusercontent.com/jamtur01/dockerbook-code/             master/code/5/sample/website/index.htmlcd  ..sudo    docker  run -d  -p  1010:80 --name  website -v  $PWD/website:/var/     www/html/website:rw chen/nginx   nginx               #"chen" is  porperty's  name.   "-v"    allows  us  to  load    host    directory   as  a   volume  into    the    container.write_dockerfile(){                echo    '''#Create a   usual   website with    docker#auth   cheng#date   2017.7.26FROM    ubuntuMAINTAINER  chen    "chenjiacheng@andlinks.com"ENV REFRESHED_AT    2014-06-01RUN apt-get -yqq    update  &&  apt-get -yqq    install nginxRUN mkdir   -p  /var/www/html/websiteADD nginx/global.conf   /etc/nginx/conf.d/ADD nginx/nginx.conf    /etc/nginx/nginx.confEXPOSE  80                                                                                  ''' >   Dockerfile}
原创粉丝点击