您的位置:首页 > 运维架构 > Docker

Docker入门与实战详细笔记

2017-09-06 15:57 447 查看


一、 镜像

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 attach ⑵docker exec ⑶nsenter
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的名称          #显示bridge的stp信息
 stp bridge的名称{on|off}      #开/关stp
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: