Day 62 Docker 入门
>>>>>>>>docker三大概念<<<<<<<<<<
1.docker镜像
Docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其他人那里下载一个已经做好的镜像来直接使用。
因为镜像包含完整的root文件系统,体积是非常庞大的,因此docker在设计时按照Union FS的技术,将其设计为分层存储的架构。
镜像不是ISO那种完整的打包文件,镜像只是一个虚拟的概念,他不是一个完整的文件,而是由一组文件组成,或者多组文件系统联合组成。
2.docker容器(container)
image和container的关系,就像面向对象程序设计中的 类和实例一样,镜像是静态的定义(class),容器是镜像运行时的实体(object)
可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序
3.docker仓库(repository)
最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括Docker Pool等,可以提供大陆用户更稳定快读的访问
>>>>>>>>>>>>>>>docker的安装<<<<<<<<<<<<<<<<<
第一种方式:
官方教程如下,最正确安装docker姿势, 如果想要安装官方版本就使用此方法
1.卸载旧版本 sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux
docker-engine-selinux docker-engine 2.设置存储库 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 3.安装docker社区版 sudo yum install docker-ce 4.启动关闭docker systemctl start docker
选择yum安装,yum源,阿里云源,163源
阿里云默认也有docker软件,也可以下载,只是版本较低
为了教学,我们使用阿里云提供的docker软件
第二种方式:
1 确认阿里云的yum源文件
vim /etc/yum.repos.d/Centos-7.repo
2 使用yum开始安装docker
yum install -y docker
3 查看docker安装版本
rpm -qi docker
docker版本
Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。
企业版包含了一些收费服务,个人开发者一般用不到。本文的介绍都针对社区版。
系统环境准备
docker最低支持centos7且在64位平台上,内核版本在3.10以上 [root@oldboy_python ~ 10:48:11]#uname -r 3.10.0-693.el7.x86_64
4 启动/查看docker
systemctl status docker # 查看docker是否启动
systemctl start docker # 启动docker
>>>>>>>>>>>>>>Docker镜像加速器<<<<<<<<<<<<<<<<
https://www.daocloud.io/mirror#accelerator-doc https://www.cnblogs.com/pyyu/p/6925606.html # 一条命令加速 curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io # 这条命令其实就是改了docker的一个配置文件里面的注册镜像地址, 可以查看一下 cat /etc/docker/daemon.json
>>>>>>>>>>>>>>>docker 常用命令<<<<<<<<<<<<<<<<<
docker search hello-docker # 搜索docker镜像 ,就是去 docker hub搜索 hello-docker而已 docker pull hello-world # 下载公网的,docker镜像 docker image ls # 查看本地的镜像有哪些 docker images # 这两条命令一样的,docker进行了很多的命令升级,不用慌 docker run hello-world # 运行一个docker镜像,产生一个容器实例 docker container ls # 列出所有正在运行的容器 docker ps -a # 列出所有曾经运行过的容器记录,以及正在运行的容器记录 docker pull centos # 下载cnetos镜像 # 容器是运行应用程序的,所以必须要先有一个操作系统为基础 # 运行一个在后台的任务 docker run -d centos /bin/sh -c "while true;do echo 爱滴魔力转圈圈; sleep 1;done" -d # 后台运行容器 /bin/sh # 指定使用centos的bash解释器 -c # 运行一段shell命令 "while true;do echo 爱滴魔力转圈圈; sleep 1;done" # 在linux后台,每秒中打印一个 爱滴魔力转圈圈 docker logs -f 容器id # 不间断打印容器的日志信息 # 容器是有自己的微型操作系统的。微型linux docker exec -it 5f6 /bin/bash exec # 进入容器的参数 -i # 交互式的操作容器 -t # 开启一个terminel终端,用于和linux交互 5f6 # docker容器的id /bin/bash # 指定docker容器,用shell解释器交互 docker run -it centos /bin/bash # 交互式的运行一个容器,且进入容器(也就是开启并进入一个新的容器)
注意: docker容器必须要有后台进程在运行,如果没有,容器就会退出
注意: docker容器必须要有后台进程在运行,如果没有,容器就会退出
注意: docker容器必须要有后台进程在运行,如果没有,容器就会退出
>>>>>>>>>>>>>>>docker 镜像相关<<<<<<<<<<<<<<<<<
一、搜索docker镜像(docker search python)
二、获取docker镜像
# 可以使用docker pull命令来从仓库获取所需要的镜像。下面的例子将从Docker Hub仓库下载一个Centos操作系统的镜像。 [root@docker ~]# docker pull centos # 获取centos镜像 [root@docker ~]# docker run -it centos /bin/bash # 完成后可以使用该镜像创建一个容器
三、查看docker镜像
docker images
docker image ls
四、运行docker镜像
docker run fce
五、删除docker镜像
如果要移除本地的镜像,可以使用docker rmi命令(在删除镜像之前先用docker rm删除依赖于这个镜像的所有容器)。注意docker rm 命令是移除容器。
[root@docker ~]# docker rmi imageID # 删除docker镜像
六、导出docker镜像
如果要导出镜像到本地文件,可以使用docker save命令。 [root@docker ~]# docker save centos > /opt/centos.tar.gz # 导出docker镜像至本地 [root@docker ~]# ll /opt/ -rw-r--r--.1 root root 204205056 12月 30 09:53 centos.tar.gz
七、导入docker镜像
# 可以使用docker load从本地文件中导入到本地docker镜像库 [root@docker ~]# docker load < /opt/centos.tar.gz # 导入本地镜像到docker镜像库 [root@docker~]# docker images # 查看镜像导入情况 REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE docker.io/centos latest 60e65a8e4030 5 days ago 196.6 MB
八、提交创建自定义的镜像(docker container commit)
1.我们进入交互式的centos容器中,发现没有vim命令 docker run -it centos 2.在当前容器中,安装一个vim yum install -y vim 3.安装好vim之后,exit退出容器 exit 4.查看刚才安装好vim的容器记录 docker container ls -a 5.提交这个容器,创建新的image docker commit 059fdea031ba tiger/centos-vim 6.查看镜像文件 [root@master /home]docker images REPOSITORY TAG IMAGE ID CREATED SIZE tiger/centos-vim latest fd2685ae25fe 5 minutes ago 348MB
>>>>>>>>>>>>>>容器相关<<<<<<<<<<<<<<<<<<<<<
docker run 与docker start的区别
docker run 只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可。
docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。
而docker start的作用是,重新启动已存在的镜像。也就是说,如果使用这个命令,我们必须事先知道这个容器的ID,或者这个容器的名字,我们可以使用docker ps找到这个容器的信息。
一、启动docker容器的方式
启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。
因为Docker的容器实在太轻量级了,很多时候用户都是随时删除和新创建容器。
(1)新建容器并且启动(run)
所需要的命令主要为docker run 例如,下面的命令输出一个hehe,之后终止容器。 [root@docker ~]# docker run centos /bin/echo "hehe" # 这跟在本地直接执行 /bin/echo'hehe' hehe [root@docker ~]# docker run --name mydocker -it centos /bin/bash # 启动一个bash终端,允许用户进行交互。 [root@1c6c3f38ea07 /]# pwd / [root@1c6c3f38ea07 /]# ls anaconda-post.log bindev etc homelib lib64 lost+foundmedia mnt optproc root runsbin srv systmp usr var --name:给容器定义一个名称 -i:则让容器的标准输入保持打开。 -t:让Docker分配一个伪终端,并绑定到容器的标准输入上 /bin/bash:执行一个命令
当利用docker run来创建容器时,Docker在后台运行的标准操作包括
检查本地是否存在指定的镜像,不存在就从公有仓库下载
利用镜像创建并启动一个容器
分配一个文件系统,并在只读的镜像层外面挂在一层可读写层
从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去
从地址池配置一个ip地址给容器
执行用户指定的应用程序
执行完毕后容器被终止
(2)docker start 容器ID
通过docker ps -a 查看已经运行过的容器
选择容器ID docker start 容器ID启动
二、进入容器
使用-d参数时,容器启动后会进入后台。某些时候需要进入容器进行操作,有很多种方法,包括使用docker attach命令或nsenter工具等。
docker exec -it 容器id
docker attach 容器id
三、停止容器
docker stop c02
#此时容器进程不存在
docker ps
四、外部访问容器
(1) 在容器内跑一个app.py程序, 运行在5000端口
(2) 使用-P参数随机映射一个端口到虚拟机上
docker run -d -P training/webapp python app.py -P 参数会随机映射端口到容器开放的网络端口
如果本地没有这个镜像,docker run会自动为我们下载镜像
检查映射端口
docker ps -l
(3) 使用-p参数自定义一个端口到虚拟机上, 如9000端口
docker run -d -p 9000:5000 training/webapp python app.py
(4) 我们可以通过虚拟机的IP 192.168.1.49加端口9000进行访问
>>>>>>>发布docker image到仓库<<<<<<<<<
docker login
docker tag tiger/centos-vim lxh661314/centos-vim
语法是: docker tag 仓库名 lxh661314/仓库名
(3).推送docker image到dockerhub
docker push addit/centos-vim:latest
(5).删除本地镜像,测试下载pull 镜像文件
docker rmi -f d69
docker pull addit/centos-vim:latest