Docker 简明笔记

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  9AA38DCD55BE302B
sudo    apt-get update
sudo    apt-get install docker-engine
sudo    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_container
sudo    docker  start   11b5de36fcb8
sudo    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_dave
sudo    docker  logs    -ft daemon_dave
sudo    docker  logs    --tail  10  daemon_dave
sudo    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 自动导出到 Syslog
sudo    docker  top daemon_dave
sudo    docker  stats   daemon_dave
sudo    docker  exec    -d  daemon_dave touch   /tmp/temptfile              # 额外启动新进程
sudo    docker  stop    daemon_dave
docker  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:5
sudo    docker  inspect daemon_dave
sudo    docker  rm  11b5de36fcb8
sudo    docker  rm  `sudo   docker  ps  -a  -q`             #-q 表示只返回容器的 ID
sudo    docker  pull    fedora:21
sudo    docker  search  puppet
sudo    docker  pull    jamtur01/puppetmaster
sudo    docker  images  fedora
sudo    docker  pause   container_name
docker深入

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

用Dockerfile构建镜像

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

#version
FROM    ubuntu
MAINTAINER  james   turnbull    "chen@email.com"
RUN apt-get update  &&  apt-get install -y  nginx
RUN echo    'hi,    im  in  your    container'  >/usr/share/nginx/html/index.html
RUN ["apt-get", "install",  "-y",   "sdcv"]
EXPOSE  80
Dockerfile指令
RUN             # 指定镜像被构建时候要运行的命令
CMD             # 容器启动时候运行的命令
CMD ["/bin/bash",   "-l"]
# 命令行中的指令会覆盖 Dockerfile 中的 CMD 指令
# 在 Dockerfile 中只能指定一条 CMD 指令
ENTRYPOINT  ["/usr/sbin/nginx"]             # 同 CMD ,在容器启动的时候运行
WORKDIR /opt/webapp/db
ENV RVM_PATH    /home/rvm       RVM_ARCHFLAGS="-arch    i386"       # 这个新的环境变量可以在后面的任何 RUN 指令中使用。
ENV TARGET_DIR  /opt/app
WORKDIR $TARGET_DIR
# 也有命令行用 -e 传递环境变量。如: sudo  docker  run -it -e  "WEB_PORT=8080" ubuntu  env
USER    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_name
ONBUILD 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    ubuntu
cd  ~
mkdir   test/sample -p
cd  test/sample
mkdir   nginx   &&  cd  nginx
wget    https://raw.githubusercontent.com/jamtur01/dockerbook-code/             master/code/5/sample/nginx/gl
obal.conf
wget    https://raw.githubusercontent.com/jamtur01/dockerbook-code/             master/code/5/sample/nginx/ng
inx.conf
write_dockerfile()
cd  ..
sudo    docker  build   -t  ubuntu  .
images_id   =   $(sudo	docker	images	|	grep	ubuntu	|	awk	'{print	$3}')
sudo    docker  history $images_idmkdir    website &&  cd  website
wget    https://raw.githubusercontent.com/jamtur01/dockerbook-code/             master/code/5/sample/website/
index.html
cd  ..
sudo    docker  run -d  -p  1010:80 --name  website -v  $PWD/website:/var/     www/html/website:rw chen/ngin
x   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.26
FROM    ubuntu
MAINTAINER  chen    "chenjiacheng@andlinks.com"
ENV REFRESHED_AT    2014-06-01
RUN apt-get -yqq    update  &&  apt-get -yqq    install nginx
RUN mkdir   -p  /var/www/html/website
ADD nginx/global.conf   /etc/nginx/conf.d/
ADD nginx/nginx.conf    /etc/nginx/nginx.conf
EXPOSE  80                                                                  
                ''' >   Dockerfile
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值