`
a_zhen
  • 浏览: 2567 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

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


分享到:
评论

相关推荐

    Docker入门与实战详解记录

    Docker入门与实战详细笔记,全部命令及实例,详细的记录,方便查阅。优秀的格式,可作为手册供查阅。来自于Docker入门与实战一书的阅读笔记。

    docker 入门实战

    Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和...

    docker入门实战学习笔记.zip

    1.Docker介绍与体系结构.docx 2.Docker内部组件、虚拟机与容器区别.docx 3.Docker应用场景.docx 4.Linux安装Docker.docx 5.镜像与容器联系和存储驱动.docx 6.镜像管理常用命令.docx 7.创建容器常见选项.docx 8....

    从Docker到Kubernetes之技术实战

    从Docker到Kubernetes之技术实战,从Docker到Kubernetes案例,详细笔记。可以让初学者充分认识从Docker到Kubernetes魅力

    docker课件,喜欢的可以下载,打包好了

    docker课件,喜欢的可以下载,打包好了 JAVA基础进阶docker入门+实战

    Docker入门与进阶实战(基于Java,通俗易懂,附源码)

    Docker近几年非常火,因为它是容器虚拟化,更能够充分提高硬件资源的使用率。其实利用率高不算什么,它最大的优势是能给让运维人员或者开发人员快速部署和交付...教学全程采用笔记+代码案例的形式讲解,通俗易懂!!!

    Docker企业应用实战

    快速入门掌握Docker容器技术,课程内容包括:1.Docker简介、基本术语? 2.Linux环境配置及Docker安装 3.镜像操作、容器操作、自定义镜像 4.镜像的分层结构和原理 5.Dockerfile详解、常用指令 6.使用Docker安装Tomcat...

    springbot实战笔记整理.zip

    《SpringBoot实战笔记整理》是针对Java开发人员的一份宝贵资源,主要涵盖了SpringBoot框架的深入理解和实际应用。SpringBoot以其简洁的配置、快速的开发效率以及强大的生态系统,已经成为Java领域中的主流微服务开发...

    机器学习从入门到实战.zip

    《机器学习从入门到实战》是一份全面的资源包,旨在帮助初学者系统地理解和掌握机器学习的基础知识,并逐步进阶到实战应用。这个压缩包可能包含一系列的教程、笔记、代码示例以及相关的学习资料,帮助你在机器学习的...

    Python3数据科学入门与实战-第1章 实验环境的搭建.zip

    了解了基本环境搭建后,你还可以探索更多高级主题,比如虚拟环境管理(使用venv或conda),版本控制(Git),以及如何使用Docker构建可移植的环境。 总的来说,Python3数据科学环境的搭建是数据探索和分析的第一步...

    华为工程师linux的笔记-第3章 .pdf

    Linux性能优化、大数据量备份、Shell企业实战基础、Shell实战高级编程、自动化运维趋势、Puppet自动化运维实战、Ansible自动化运维实战、Jenkins企业级自动化实战、企业级高并发网站集群、Docker、K8S、Hadoop、Ceph...

    华为工程师linux的笔记-第5章.pdf

    Linux性能优化、大数据量备份、Shell企业实战基础、Shell实战高级编程、自动化运维趋势、Puppet自动化运维实战、Ansible自动化运维实战、Jenkins企业级自动化实战、企业级高并发网站集群、Docker、K8S、Hadoop、Ceph...

    最全的go语言编程资料(入门+进阶+雨痕学习笔记4)

    - 容器化与Docker:Go语言是Docker的主要实现语言,深入理解Go可以更好地掌握容器技术。 - 网络编程:Go提供了强大的网络编程库,如`net/http`用于构建Web服务器,`net`包处理TCP/UDP连接。 - 内存管理和垃圾回收...

    华为工程师linux的笔记-第2章 .pdf

    Linux性能优化、大数据量备份、Shell企业实战基础、Shell实战高级编程、自动化运维趋势、Puppet自动化运维实战、Ansible自动化运维实战、Jenkins企业级自动化实战、企业级高并发网站集群、Docker、K8S、Hadoop、Ceph...

    尚硅谷Spring Boot课堂笔记.rar

    此外,笔记可能还会涉及Spring Boot的测试、分布式系统支持(如消息队列RabbitMQ或Kafka)、微服务架构、Docker容器化部署等方面的内容,全面覆盖Spring Boot的开发流程和技术栈。 总之,《尚硅谷Spring Boot课堂...

    华为工程师linux的笔记-第9章.pdf

    Linux性能优化、大数据量备份、Shell企业实战基础、Shell实战高级编程、自动化运维趋势、Puppet自动化运维实战、Ansible自动化运维实战、Jenkins企业级自动化实战、企业级高并发网站集群、Docker、K8S、Hadoop、Ceph...

    华为工程师linux的笔记-第6章.pdf

    Linux性能优化、大数据量备份、Shell企业实战基础、Shell实战高级编程、自动化运维趋势、Puppet自动化运维实战、Ansible自动化运维实战、Jenkins企业级自动化实战、企业级高并发网站集群、Docker、K8S、Hadoop、Ceph...

    华为工程师linux的笔记-第7章.pdf

    Linux性能优化、大数据量备份、Shell企业实战基础、Shell实战高级编程、自动化运维趋势、Puppet自动化运维实战、Ansible自动化运维实战、Jenkins企业级自动化实战、企业级高并发网站集群、Docker、K8S、Hadoop、Ceph...

    华为工程师linux的笔记-第8章.pdf

    Linux性能优化、大数据量备份、Shell企业实战基础、Shell实战高级编程、自动化运维趋势、Puppet自动化运维实战、Ansible自动化运维实战、Jenkins企业级自动化实战、企业级高并发网站集群、Docker、K8S、Hadoop、Ceph...

    华为工程师linux的笔记-第10章 .pdf

    Linux性能优化、大数据量备份、Shell企业实战基础、Shell实战高级编程、自动化运维趋势、Puppet自动化运维实战、Ansible自动化运维实战、Jenkins企业级自动化实战、企业级高并发网站集群、Docker、K8S、Hadoop、Ceph...

Global site tag (gtag.js) - Google Analytics