docker基础
1. 基础
一次构建,处处运行。
三要素:仓库、镜像、容器。
docker和传统虚拟化方式的不同之处:
- 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在改系统上再运行所需应用进程;
- 而容器内的应用进程直接运行与宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便;
- 每个容器之间互相隔离,每个容器都有自己的文件系统,容器之间进程不会互相影响,能区分计算资源。
1.1. 镜像
1.2. 容器
1.3. 仓库
2. 安装
2.1. Centos6.8安装
2.2. Centos7安装
https://docs.docker.com/engine/install/centos/
sudo管理员权限的切换,如果当前用户是root,就不用sudo了
\是连接符,不想写太长
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 ps时,报错Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
解决:
配置环境变量
sudo vim /etc/profile.d/docker.sh
export DOCKER_HOST=tcp://localhost:2375
source /etc/profile
source /etc/bashrc
配置启动文件
sudo vim /lib/systemd/system/docker.service
其中修改ExecStart所在行为下面:
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -H tcp://0.0.0.0:7654
#2375 是管理端口
#7654 是备用端口
sudo systemctl daemon-reload
sudo systemctl restart docker.service
docker version
3. 阿里云镜像加速器
3.1. 阿里云镜像加速器地址
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
3.2. Centos6.8配置加速器
3.3. Centos7配置加速器
3.4. 测试hello-world
4. 命令
4.1. 镜像命令
4.2. 容器命令
docker pull centos
VMware创建centos7虚拟机时的centos7镜像4个多G,从阿里云上下载下来的镜像200M。
启动容器 docker start 容器ID或容器名
重启容器 docker restart 容器ID或容器名
停止容器 docker stop 容器ID或容器名
强制停止容器 docker kill 容器ID或容器名
删除已停止的容器 docker rm 容器ID
xargs是Linux可变参数;| 是管道符,上一个命令的结果集作为输入参数传给下一个。
4.3. 重点命令
Docker的机制如果没有前台进程就会自杀,所以只用docker run -d 容器名的命令,会马上自杀,所以下面截图命令加了每2秒打印,容器还会在运行。
Docker是一层套一层的
如果容器停了,里面的文件就不存在了,所以想把文件拷贝到宿主机上。
5. 镜像
6. Commit操作
7. 容器内添加数据卷
Docker容器数据卷能干嘛?1容器的持久化;2容器间继承+共享数据
7.1. 用命令添加
可以通过docker inspect命令查看描述中有以下
-v是卷的缩写,ro是read only缩写,容器里面不能做增删改,只能查
7.2. 用DockerFile添加
这台宿主机上有/myDataVolume目录,但是别的宿主机上可能没有,所以不能这么写。
相当构建了一个自定义的centos镜像,并且带了两个卷。
附:
- 如果出现不能写的问题
- 看Tomcat的dockerFile
点开后往下翻
8. 数据卷容器
dc02和dc03继承自dc01
删除dc01,dc02和dc03之间还能数据共享
再建个dc04,继承自dc03,再删除dc03
9. DockerFile解析
1. 编写dockerFile文件
2. docker build构建,获得一个自定义的镜像
3. docker run
dockerFile是用来构建docker镜像的构建文件,是由一系列命令和参数构成的脚本。
看下centos的镜像长什么样?
到https://hub.docker.com/_/centos里
scratch是源镜像
第二行是作者邮箱
CMD是命令的意思
9.1. DockerFile的体系结构
9.2. 案例-自定义镜像centos
9.3. 案例-CMD/EBTRYPOINT
如果把ENTRYPOINT换成CMD就会报错,因为CMD是把上一个命令覆盖,而ENTRYPOINT是追加,会把docker run之后的参数当做参数传递给ENTRYPOINT,之后形成新的命令组合。
9.4. 案例-ONBUILD
9.5. 案例-自定义镜像Tomcat
在宿主机上
DockerFile内容:
9.6. 案例-Redis
docker pull redis:3.2