大家好,欢迎来到IT知识分享网。
前言
我们话不多说直接看docker架构图,能从中大致获取到的内容有远程仓库registry、镜像images、本地容器containers、本地构建build几个概念。
Docker特性:
文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。
资源隔离:系统资源,像CPU和内存等可以分配到不同的容器中,使用cgroup。
网络隔离:每个进程容器运行在自己的网路空间,虚拟接口和IP地址。
日志记录:Docker将收集到和记录的每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或者批量检索。
变更管理:容器文件系统的变更可以提交到新的镜像中,并可重复使用以创建更多的容器。无需使用模板或者手动配置。
交互式shell:Docker可以分配一个虚拟终端并且关联到任何容器的标准输出上,例如运行一个一次性交互shell。
一、Docker安装
1、安装背景
1、yum -y install docker 2、yum -y install docker-engine 3、yum -y install docker-ce
2017年初,docker公司将原先的docker开源项目改名为moby。
moby是集成了原先的docker项目,是社区维护的开源项目,谁都可以在moby的基础打造自己的容器产品。
docker-ce 是docker公司维护的开源项目,是一个基于moby项目的免费容器产品。
docker-ee 是docker公司维护的闭源产品,是docker公司的商业产品。
注:moby是源代码,docker-ce 和docker-ee 是产品容器,rpm包。
所以,目前我们经常使用的版本当然是docker-ce啦!
2、安装Docker
当前环境为centos系统:
- Docker 要求 CentOS 系统的内核版本高于 3.10,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
通过 uname -r 命令查看你当前的内核版本 - 如果安装过请先卸载
yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
3.安装依赖设置yum仓库
安装依赖:
yum install -y yum-utils \ device-mapper-persistent-data \ lvm2
设置仓库:
yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
- 安装docker
yum install docker-ce docker-ce-cli containerd.io
- 启动并加入开机启动
systemctl start docker systemctl enable docker
- 验证是否安装成功
docker version
docker run hello-world
显示如下即安装成功!
[root@iZ2ze68ge5c1uwlkmnb9ixZ zcapp]# docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world 1b930d010525: Pull complete Digest: sha256:0e11c388b664df8a27a901dce21eb89f11d8292f7fca1b3e3c4321bf7897bffe Status: Downloaded newer image for hello-world:latest Hello from Docker! This message shows that your installation appears to be working correctly. To generate this message, Docker took the following steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from the Docker Hub. (amd64) 3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output to the Docker client, which sent it to your terminal. To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bash Share images, automate workflows, and more with a free Docker ID: https://hub.docker.com/ For more examples and ideas, visit: https://docs.docker.com/get-started/
3、启动服务
systemctl start docker && systemctl enable docker
docker version #查看docker版本
这里我们很清晰的可以看到docker是一个C/S架构的模式。客户端是我们的命令行操作,服务端是一个守护进程。
docker info #查看docker基本信息
我们可以通过docker info看到机器存放docker镜像得地址,也可以看到docker仓库的地址。
二、 Docker基本命令
1、帮助命令
docker version #显示docker详细信息 docker info #显示docker的系统信息,包括镜像和容器的数量 docker --help #docker帮助命令手册
2、镜像命令
docker images #查看所有本地主机的镜像 docker search 镜像名 #搜索镜像 docker pull 镜像名 [标签] #下载镜像(如果不写tag,默认是latest) docker rmi 镜像名 [标签] #删除镜像 docker rmi -f $(docker images -aq) 删除全部镜像 docker tag 镜像名:版本 新镜像名:版本 #复制镜像并且修改名称 docker commit -a "xxx" -c "xxx" 镜像ID 名字:版本 #提交镜像 -a :提交的镜像作者; -c :使用Dockerfile指令来创建镜像; -m :提交时的说明文字; docker load -i /xxx/xxx.tar #导入镜像 docker save -o /xxx/xxx.tar #保存一个镜像为一个tar包
3、容器命令
docker run [可选参数] image 命令 #启动容器(无镜像会先下载镜像) #参数说明 --name = "Name" 容器名字 -c 后面跟待完成的命令 -d 以后台方式运行并且返回ID,启动守护进程式容器 -i 使用交互方式运行容器,通常与t同时使用 -t 为容器重新分配一个伪输入终端。也即启动交互式容器 -p 指定容器端口 -p 容器端口:物理机端口 映射端口 -P 随机指定端口 -v 给容器挂载存储卷 docker build #创建镜像 -f:指定dockerfile文件路径 -t:镜像名字以及标签 docker logs 容器实例的ID #查看容器日志 docker rename 旧名字 新名字 # 给容器重新命名 docker top 容器实例的ID #查看容器内进程 docker ps -a #列出所有容器(不加-a就是在运行的) docker rm 容器实例的ID #删除容器(正在运行容器不能删除,除非加-f选项) docker kill 容器实例的ID #杀掉容器 docker history 容器实例的ID #查看docker镜像的变更历史 docker start 容器实例的ID #启动容器 docker restart 容器实例的ID #重启容器 docker stop 容器实例的ID #停止正在运行的容器 docker attach /docker exec 容器实例的ID #同为进入容器命令,不同的是attach连接终止会让容器退出后台运行,而exec不会。并且,docker attach是进入正在执行的终端,不会情动新的进程,而docker exec则会开启一个新的终端,可以在里面操作。 docker image inspect 容器名称:容器标签 #查看容器内源数据 docker cp 容器id:容器内路径 目的主机路径 #从容器内拷贝文件到主机(常用)或者从主机拷贝到容器(一般用挂载) exit #直接退出容器 crlt + P + Q #退出容器但是不终止运行
三、实战测试:部署Nginx
docker中修改nginx配置:https://www.jb51.net/server/301646vmd.htm
四、提交镜像
1、命令
docker commit 提交容器成为一个新的副本 docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
2、实验
这里我们就制作了我们的第一个镜像,之后我还会教大家怎么将镜像发布到docker hub上。
五、 Dockerfile
1、什么是Dockerfile?
Dockerfile是一个创建镜像所有命令的文本文件,包含了一条条指令和说明, 每条指令构建一层,,通过docker build命令,根据Dockerfile的内容构建镜像,因此每一条指令的内容, 就是描述该层如何构建。有了Dockefile,,就可以制定自己的docker镜像规则,只需要在Dockerfile上添加或者修改指令,,就可生成docker 镜像。
2、Dockerfile 指令选项
Dockerfile 指令选项: FROM #基础镜像 。 (centos) MAINTAINER #镜像的作者和邮箱。(已被弃用,结尾介绍代替词) RUN #镜像构建的时候需要执行的命令。 CMD #类似于 RUN 指令,用于运行程序(只有最后一个会生效,可被替代) EXPOSE #对外开放的端口。 ENV #设置环境变量,定义了环境变量,那么在后续的指令中,就可以使用这个环境变量。 ADD # 步骤:tomcat镜像,这个tomcat压缩包。添加内容。 COPY #复制指令,将文件拷贝到镜像中。 VOLUME #设置卷,挂载的主机目录。 USER #用于指定执行后续命令的用户和用户组, 这边只是切换后续命令执行的用户(用户和用户组必须提前已经存在)。 WORKDIR #工作目录(类似CD命令)。 ENTRYPOINT #类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,会追加命令。 ONBUILD #当构建一个被继承Dokcerfile,就会运行ONBUILD的指令。出发执行。 注意:CMD类似于 RUN 指令,用于运行程序,但二者运行的时间点不同: CMD 在docker run 时运行。 RUN 是在 docker build。 作用:为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。 CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。 如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。 LABEL(MAINTALNER已经被弃用了,目前是使用LABEL代替) LABEL 指令用来给镜像添加一些元数据(metadata),以键值对的形式,语法格式如下: LABEL <key>=<value> <key>=<value> <key>=<value> ... 比如我们可以添加镜像的作者: LABEL org.opencontainers.image.authors="runoob"
六、 实战测试:发布镜像
1、注册docker hub 账号
2、服务器上使用命令行登陆
docker login -u [账号名字] #登陆命令 docker out #退出命令 docker push 账号/容器名字:版本号
3、构建镜像
1. 创建工作目录。
mkdir dockerfile cd dockerfile ls
2. 编写dockerfile。
FORM centos MAINTAINER ydk<123@.com> ENV MYPATH /usr/local WORKDIR $MYPATH RUN yum -y install vim-enhanced RUN yum -y install net-tools EXPOSE 80 CMD echo #MYPATH CMD echo "------------END-------------" CMD /bin/bash
3. 构建dockerfile。
docker build 命令:
docker build -f mydockerfile-t mycentos:1.0 .
到这里,我们就制作好了我们自己的镜像,虽然它并没有什么用。
这里我们再启动我们自己制作的镜像,进去看看我们写的dockerfile都生效了没有。
注:不加标签默认是latest,所以docker run的时候要带上镜像标签。
同时,我们可以用docker history命令来进一步验证dockerfile的构建过程。
4. 推送镜像至docker hub
官方文档要求,我们推送的镜像名字必须是YOUR_DOCKER_HUB_ID/XXXX,所以我们需要给镜像换一个名字。
docker tag mycentos/1.0 自己的账号名字/mytomcat docker push 自己的账号名字/mytomcat
七、Docker网络
1、ifconfig
brctl show
2、Docker网络模式
docker网络模式有以下几种:
Host:容器不会虚拟出自己的网卡,配置主机的IP等,而是使用宿主机的IP和端口 Container: 创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP。(一般不用) None: 该模式关闭了容器的网络功能。(一般不用) Bridge:默认为该模式(桥接,自己创建也是用它),此模式会为每一个容器分配,设置IP等,并将容器连接到一个docker0 的虚拟网桥,通过docker 0 网桥以及iptables nat 表配置与宿主机通信。
docker network ls #列出docker网卡
本文内容大量摘录自博客:docker入门,这一篇就够了
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/113381.html









