Docker入门与实战详细笔记

一、 镜像

1.1、 获取镜像

命令: docker pull NAME[:TAG] 例: docker pull centos 相当于 docker pull centos:latest 相当于 docker pull registry.hub.docker.com/centos:latest registry.hub.docker.com是默认的注册服务器(Docker Hub)

1.2、 查看镜像信息

命令:docker images docker tag 为本地镜像添加新的标签 例:docker tag dl.dockerpool.com:5000/centos:latest centos:latest dl.dockerpool.com:5000/centos:latest和centos:latest指向同一个镜像 docker inspect 获取镜像的详细信息 例:① docker inspect 5506de2b643b ② docker inspect –f {{“.NetworkSettings.IPAddress”}} 550

1.3、 搜索镜像

命令:docker search 例: docker search mysql

1.4、 删除镜像

命令:docker rmi IMAGE IMAGE可以是标签或ID

1.5、 创建镜像

创建镜像的方法有三种:⑴基于已有镜像的容器创建,⑵基于本地模板导入,⑶基于Dockerfile创建 ⑴、docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] 主要选项:-a, --author=”” 作者信息 -m, --message=”” 提交消息 -p, --pause=true 提交是暂停容器运行 例:docker commit –m “Added a new file” –a “Docker Newbee” a925cb40b3f0 test ⑵、docker import 例:cat my_container.tar |docker import - image_name:tag docker export <CONTAINER ID> > my_container.tar docker export 命令,导出容器快照到本地文件

1.6、 存出和载入镜像

命令: docker save(存出)和docker load(载人) 例:docker save –o ubuntu_14.04.tar ubuntu:14.04 docker load –input ubuntu_14.04.tar 或 docker load < ubuntu_14.04.tar docker load 来导入镜像存储文件到本地镜像库 docker import 来导入一个容器快照到本地镜像库 容器快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态)从容器快照文件导入时可以重新指定标签等元数据信息 镜像存储文件将保存完整记录,体积也要大

1.7、 上传镜像

镜像默认存储在/var/lib/docker 命令:docker push NAME[:TAG] 例:docker push user/test:latest

二、 容器

2.1、创建容器

命令:docker create [OPTIONS] IMAGE [COMMAND] [ARG...] docker start [OPTIONS] CONTAINER [CONTAINER...] docker run [OPTIONS] IMAGE [COMMAND] [ARG...] 创建的容器处于体质状态,使用docker start 启动它 docker run 等价于 docker create ,docker start 例:docker create –it ubuntu:latest docker run –it ubuntu:14.04 /bin/bash Ctrl+d 或输入exit退出容器 docker logs [OPTIONS] CONTAINER 获取容器的输出信息

2.2、终止容器

命令:docker stop [OPTIONS] CONTAINER [CONTAINER...] -t|--time[=10]] 首先发送SIGTERM信号,等待一段时间后再发送SIGKILL信号终止容器 docker kill 直接发送SIGKILL信号来强行终止容器 例: docker stop ce5 docker start ce5 docker restart ce5

2.3、进入容器

进入容器有多种方法:⑴docker attachdocker execnsenter docker attach [OPTIONS] CONTAINER 多个窗口同时attach到同一个容器是,所有窗口都会同步显示 docker exec –ti 6e5542159db4 /bin/bash PID=$(DOCKER INSPECT –F “{{.State.Pid}}” <container>) nsenter --target $PID --mount --uts --ipc --net --pid

2.4、删除容器

命令:docker rm [OPTIONS] CONTAINER [CONTAINER...] 例:docker rm 6e5542159db4 删除运行中的容器,添加-f

2.5、导入和导出容器

导出容器:导出一个已经创建的容器到一个文件 命令:docker export [OPTIONS] CONTAINER 例:docker export ce5 >test_for_run.tar 将文件传输到其他机器上,通过导入命令实现容器的迁移 导入容器:导入文件为镜像 例:cat my_container.tar |docker import - image_name:tag

三、 仓库

登录命令:docker login docker run –d –p 5000:5000 –v /opt/data/registry:/tmp/registry registry

Start your registry

docker run -d -p 5000:5000 --name registry registry:2 Pull (or build) some image from the hub docker pull ubuntu Tag the image so that it points to your registry docker tag ubuntu localhost:5000/myfirstimage Push it docker push localhost:5000/myfirstimage Pull it back docker pull localhost:5000/myfirstimage Now stop your registry and remove all data docker stop registry && docker rm -v registry

四、 数据管理

4.1、数据卷

在用docker run 命令的时候,使用-v 可以再容器内创建一个数据卷,多次使用可创建多个数据卷 例: ①、创建数据卷 docker run -dp --name web -v /webapp ubuntu:14.04 docker inspect -f {{.Volumes}} $CONTAINER_ID 可查看数据卷对应的主机上的文件 ②、挂载一个主机目录作为数据卷 docker run -dp --name web -v /src/webapp:/opt/webapp ubuntu:1404 上面这条命令加载主机/src/webapp目录到容器的/opt/webapp目录 docker run -dp --name web -v /src/webapp:/opt/webapp:ro ubuntu:14.04 加了:ro之后,容器内挂载的数据卷的数据就无法修改。 docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu:14.04 这样就可以记录在容器输入过的命令历史(不同shell版本有所不同) 4.2、数据卷容器

4.2、数据卷容器

①、创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到/dbdata docker run -ti -v /dbdata --name dbdata ubuntu:14.04 ②、创建db1和db2两个容器,并从dbdata容器挂载数据卷 docker run -ti --volumes-from dbdata --name db1 ubuntu:14.04 docker run -ti --volumes-from dbdata --name db2 ubuntu:14.04 ③、可以多次使用–volumes-from参数来从多个容器挂载多个数据卷。还可以从其他已经挂载了容器卷的容器来挂载数据卷 docker run -d --name db3 --volumes-from db1 ubuntu:14.04 #注意:使用--volumes-from参数所挂载数据卷的容器自身并不需要保持在运行状态

4.3利用数据卷容器迁移数据

①、备份 docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu:14.04 tar cvf /backup/backup.tar /dbdata a.首先利用ubuntu镜像创建了一个容器worker。 b.使用–volumes-from dbdata参数来让worker容器挂载dbdata容器的数据卷(即dbdata数据卷); c.使用-v $(pwd):/backup参数来挂载本地的当前目录到worker容器的/backup目录 worker容器启动后,使用了tar cvf /backup/backup.tar /dbdata命令来将/dbdata下内容备份为容器内的/backup/backup.tar,即宿主主机当前目录下的backup.tar。 ②、恢复 docker run -v /dbdata --name dbdata2 ubuntu:14.04 docker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar

五、网络基础配置

5.1、端口映射实现访问容器

①、通过-P或-p指定端口映射, -P 随机映射一个49000~49900的端口,-p可以指定要映射的端口

5.2、容器互联实现容器间通信

--link 参数可以让容器之间安全的进行交互 –link name:alias 例:docker run –d –P –name web –link db:db training/webapp python app.py db为容器的名字

六、使用Dockerfile 创建镜像

6.1、基本结构

Dockerfile分为四部分: ①基础镜像信息, ②维护者信息, ③镜像操作指令,④容器启动时执行指令

6.2、指令

FROM: 格式为 FROM<image> 或 FROM<image>:<tag> 第一条指令必须是FROM指令。并且,如果在同一个Dockerfile中创建多个镜像时,可以使用多个FROM指令(每个镜像一次)。 MAINTAINER:格式为MAINTAIER<name>,指定维护者信息。
RUN:
格式为RUN <command>或者RUN [“executable”,“param1”,“param2”]。
前者将在shell终端中运行的命令,即/bin/sh–c;后者则使用exec执行。指定使用其他终端可以通过第二种方式实现,例如RUN[“/bin/bash”,“-c”,“echohello”]。每条RUN指令将在当前镜像基础上执行指定命令,并提交为新的镜像。当命令较长时可以使用\来换行。
CMD:
支持三种格式:
CMD [“executable”,“param1”,”param2”] 使用exec 执行,推荐方式
CMD command param1 param2 在/bin/sh中执行,提供给需要交互的应用。
CMD [“param1”,”param2”] 提供给ENTRYPOINT的默认参数
指定容器启动后执行的命令,一般都是早就写好的脚本,例如:CMD[“/run.sh”]。注意:如果Dockerfile中指定了多条命令,只有最后一条会被执行。如果用户启动时候加了运行的命令,则会覆盖掉CMD指定的指令。

EXPOSE:
格式为:EXPOSE <port> [<port> …]
告诉Docker服务端容器需要暴露的端口号,供互联系统使用。在启动容器时需要通过-P(注意是大写),Docker主机会自动分配一个端口转发到指定的端口;使用-p,则可以具体指定哪个本地端口映射过来。

ENV:
格式为:ENV <key> <value> 指定一个环节变量,会被后续的RUN指令使用,并在容器运行时保持

ADD:
格式:ADD  <src> <dest> 将复制指定的的文件复制到容器中。src必须为Dockerfile所在位置的相对路径,也可以是一个URL;还可以是一个tar文件(自动解压为目录)

COPY:
格式为: copy <src> <dest> 复制本地主叫的<src>(为Dockerfile所在位置的相对路径,文件或目录)为容器中的<dest>.目标路径不存在时,会自动创建。当使用本地目录为源目录时,推荐使用COPY

ENTRYPOINT:
有两种格式:
ENTRYPOINT [“executable”, “param1”,”param2”]
ENTRYPOINT command param1 param2(shell 中执行)
配置容器启动后执行的命令,并且不可被docker run 提供的参数覆盖。
每个Dockerfile中只能有一个ENTRYPOINT,当指定多个ENTRYPOINT时,只有最后一个生效。和CMD相似,却有不同。

USER:
格式:USER daemon
指定运行容器时的用户名或者UID,后续的RUN也会使用指定的用户。当服务不需要管理员权限时,可以通过该命令指定运行用户。并且可以在之前创建所需要的用户。
要临时获取管理员权限的时候要使用gosu,不推荐使用sudo。如果不指定,容器默认是root运行。

WORKDIR:
格式为: WORKDIR /path/to/workdir
为后续的RUN,CMD,ENTRYPOINT指令配置工作目录
可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径。

ONBUILD:
配置当所创建的镜像作为其他新创建景象的基础镜像时,所执行的操作指令。
例如,Dockerfile使用如下内容创建了镜像image-A
[…]
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/python-build –dir /app/src
[…]
FROM image-A
#自动添加
ADD . /app/src
RUN /usr/local/bin/ python-build–dir/app/src

6.3、创建镜像

命令:docker build 例:docker build –t build_repo/first_image /tmp/docker_builder/ 指定Dockerfile 所在路径为/tmp/docker_builder/, 并且希望生产镜像标签为build_repo/first_image
 
 
 
网络基础参考

网桥是在数据链路层,将两个LAN连接起来,根据MAC地址来转发帧,可以看作低层的路由器。

桥接就是把一台机器上的若干个网络接口“连接”起来。其结果是,其中一个网口收到的报文会被复制给其他网口并发送出去。以使得网口之间的报文能够互相转发

交换机就是这样一个设备,它有若干个网口,并且这些网口是桥接起来的。于是,与交换机相连的若干主机就能够通过交换机的报文转发而互相通信。交换机是一种基于MAC地址识别,能完成封装转发数据包功能的网络设备。交换机可以学习”MAC地址,并把其存放在内部地址表中,通过在数据帧的始发者和目标接收者之间建立临时的交换路径,使数据帧直接由源地址到达目的地址。

关闭网桥: ip link set br-79ea889a5ac8 down

删除网桥: brctl delbr br-79ea889a5ac8

 

Virtual EthernetPair简称veth pair,是一个成对的端口,所有从这对端口一 端进入的数据包都将从另一端出来,反之也是一样.

、创建一堆”veth pair”接口A和B

ip link add A type veth peer name B

、绑定A接口到网桥docker0

brctl addif docker0 A

、启用A接口

ip link set A up

brctl Usage: brctl [commands] commands:

 addbrbridge的名称  #添加bridge  delbr bridge的名称 #删除bridge  addif bridge的名称device的名称#添加接口到bridge  delif bridge的名称device的名称#bridge中删除接口  setageing bridge的名称时间     #设置老化时间,即生存周期  setbridgeprio bridge的名称优先级#设置bridge的优先级  setfd bridge的名称时间         #设置bridge转发延迟时间  sethello bridge的名称时间      #设置hello时间  setmaxage bridge的名称时间     #设置消息的最大生命周期  setpathcost bridge的名称端口权重#设置路径的权值  setportprio bridge的名称端口优先级#设置端口的优先级  show     #显示bridge列表  showmacs bridge的名称  #显示MAC地址  showstp  bridge的名称          #显示bridgestp信息  stp bridge的名称{on|off}      #/stp


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值