1.docker
docker本质: 打包装箱,每个箱子都是隔离的,可以打包运行环境,一键运行程序的容器化技术。
2.容器与虚拟机比较
比较Docker和虚拟化技术的不同
1.传统虚拟机, 虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
2. 容器内的应用直接运行在宿主机的内部,容器是没有自己的内核的,也没有虚拟硬件,所以轻便
3. 每个容器间是相互隔离的,每个容器内都有一个属于自己的文件系统,互不影响
应用更快速的交互和部署
1.每个容器间是相互隔离的,每个容器内都有一个属于自己的文件系统,互不影响
2. 更便捷的升级和扩缩容
3. 更简的系统运维
4. 更高效的计算资源利用
5.与传统的虚拟机相比,Docker优势体现为启动速度快、占用体积小。
2.名词解释
镜像(iamge):
Docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像 ===> run ===> tomcat01容器, 通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)
容器(container):
1.Docker利用容器技术,独立运行一个或者一组应用, 通过镜像来创建的
2. 启动,停止,删除,基本命令!
3. 就目前可以把这个容器理解为一个建议的linux系统
仓库(repository)
1.存放镜像的地方
2.Docker Hub(默认是国外的)
3.阿里云,都有容器服务(配置镜像加速!)
2. 阿里云镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://0wrdwnn6.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
3.安装docker
卸载旧版本
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装依赖
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
添加yum源
$ sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装最新的docker
$ sudo yum install docker-ce docker-ce-cli containerd.io
选择安装docker版本
$ yum list docker-ce --showduplicates | sort -r
docker-ce.x86_64 3:20.10.7-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.7-3.el7 @docker-ce-stable
docker-ce.x86_64 3:20.10.6-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.5-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.4-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.3-3.el7 docker-ce-stable
docker-ce.x86_64 3:20.10.2-3.el7 docker-ce-stable
$ sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
#启动 停止 重启Docker。
$ service docker start
$ service docker stop
$ service docker restart
#开机自启docker
$ systemctl enable docker
#卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
#删除资源
rm -rf /var.lib/docker
3.安装docker Run的运行过程
4.镜像相关命令
1.1 查看镜像
docker images
--all , -a # 列出所有镜像
--quiet , -q # 只显示镜像的id
1.2 搜索镜像
如果你需要从网络中查找需要的镜像,可以通过以下命令搜索
docker search 镜像名称
1.3 拉取镜像
拉取镜像就是从中央仓库中下载镜像到本地
docker pull 镜像名称
1.4 删除镜像
按镜像ID删除镜像
docker rmi 镜像ID
#删除所有镜像
docker rmi `docker images -q`
2 容器相关命令
2.1 查看容器
#查看正在运行的容器
docker ps
#查看所有容器
docker ps –a
#查看最后一次运行的容器
docker ps –l
#查看停止的容器
docker ps -f status=exited
# 删除指定容器
docker rm -f 容器id
# 删除所有容器
docker rm -f $(docker ps -aq)
# 删除所有的容器
docker ps -a -q|xargs docker rm -f
2.2 创建与启动容器
创建容器常用的参数说明:
创建容器命令:
docker run [可选参数] image
# 参数说明
--name=“Name” 容器名字 tomcat01 tomcat02 用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
-p 随机指定端口
# 测试,启动并进入容器
# docker run -it centos /bin/bash
[/]# ls # 查看容器内的centos,基础版本,很多命令是不完善的
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
# 从容器中退回主机
[/]# exit
exit
[/]# ls
bin dev fanfan lib lost+found mnt proc run srv tmp var
boot etc home lib64 media opt root sbin sys usr
(1)交互式方式创建容器
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
这时我们通过ps命令查看,发现可以看到启动的容器,状态为启动状态
退出当前容器
exit
(2)守护式方式创建容器:
docker run -di --name=容器名称 镜像名称:标签
登录守护式容器方式:
docker exec -it 容器名称 (或者容器ID) /bin/bash
2.3 停止与启动容器
停止容器:
docker stop 容器名称(或者容器ID)
启动容器:
docker start 容器名称(或者容器ID)
2.4 文件拷贝
如果我们需要将文件拷贝到容器内可以使用cp命令
docker cp 需要拷贝的文件或目录 容器名称:容器目录
也可以将文件从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或目录
2.5 目录挂载
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
#创建容器 添加-v参数 后边为 宿主机目录:容器目录,例如:
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
如果你共享的是多级的目录,可能会出现权限不足的提示。
这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题
2.6 查看容器IP地址
我们可以通过以下命令查看容器运行的各种数据
docker inspect 容器名称(容器ID)
也可以直接执行下面的命令直接输出IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
2.7 删除镜像
# docker rmi -f IMAGE ID # 删除指定镜像
# docker rmi -f IMAGE ID1 IMAGE ID2 IMAGE ID3 # 删除多个镜像
# docker rmi -f $(docker images -aq) # 删除所有镜像
2.8 查看容器日志
docker logs -tf --tail number 容器id
3.docker 安装Tomcat
# 官方的使用
docker run -it --rm tomcat:9.0
# 我们之前的启动都是后台的,停止了容器之后, 容器还是可以查到,docker run -it --rm 一般用来测试,用完就删
# 下载再启动
docker pull tomcat
# 启动运行
docker run -d -p 3344:8080 --name tomcat01 tomcat
# 测试访问没有问题
# 进入容器
docker exec -it tomcat01 /bin/bash
# 发现问题:1.linux命令少了, 2. webapps下内容为空,阿里云净吸纳过默认是最小的镜像,所有不必要的都剔除了,保证最小可运行环境即可
4.docker的可视化界面 portatiner
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
# 测试
[root@iZ2zeg4ytp0whqtmxbsqiiZ home]# curl localhost:8088
# 外网访问 http://ip:8088
4.Docker 镜像加载原理
Unionfs(联合文件系统): Union文件系统( Unionfs)是一种分层、轻量級并且高性能的文件系统 ,它支持对文件系统的修改作为一次提交来一层层的加 (下载的时候,会出现多个层次的下载),同时可以将不同目录挂载到同一个虚拟文件系统下 unite several directories into a single virtualfilesystem)。 Union文件系统是 Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
特性: 一次同时加载多个文件系统,但从外面看起来,只能看到个文件系统,联合加载会把各层文件系统加起来,这样最终的文件系统会包含所有底层的文件和目录。
5.docker commit
1.安装Tomcat容器,复制webapps.dist到webapps下提交修改后的Tomcat容器为镜像
[root@admin ~]# docker commit -a='hdh' -m='add webapps' 86ce720b9e3e tomcat1.1.0
sha256:20e82f35134bee485523dacdb1dd070f86f51161a3f5a7981c60a5b4d530461c
我们会发现提交的Tomcat后生成的镜像会比我们下载的镜像大一点。
提交镜像的原理:
我们下载的镜像是只读的,我们的操作实质上是在容器上又加了一层,最后commit的时候实际上是打包后的镜像。
合并提交