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 imagesdocker 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 IMAGEIMAGE可以是标签或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 ⑶nsenterdocker 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 logindocker run –d –p 5000:5000 –v /opt/data/registry:/tmp/registry registry
Start your registry
docker run -d -p 5000:5000 --name registry registry:2Pull (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,并在其中创建一个数据卷挂载到/dbdatadocker 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
相关文章推荐
- Docker 学习笔记(一) Docker实战入门以及Dockerfile
- docker入门实战笔记
- Docker系列一之基础快速入门企业实战
- Docker学习总结(1)——Docker实战之入门以及Dockerfile(一)
- Docker学习总结(12)——非常详细的 Docker 学习笔记
- Scala学习笔记06【Tuple、Array、Map、文件实战入门】
- 非常详细的 Docker 学习笔记
- java编写service详细笔记 - centos7.2实战笔记(windows类似就不在重复了)
- Maven入门实战笔记-11节[6]
- GIT入门笔记(11)- 多种撤销修改场景和对策--实战练习
- [置顶] Docker学习总结(1)——Docker实战之入门以及Dockerfile(一)
- python聚类算法实战详细笔记 (python3.6+(win10、Linux))
- [笔记] docker入门篇1
- 非常详细的 Docker 学习笔记
- Scala学习笔记27【泛型类、泛型方法、Bounds入门实战】
- Docker入门实战(三)——用Dockerfile构建镜像
- 【Docker技术入门与实战】存出和载入镜像
- 非常详细的 Docker 学习笔记
- Docker 入门笔记 5 - 在Stack中部署多个service
- Docker入门笔记(慕课网)