前言
1.docker特点:
docker是一个开源的应用容器引擎,基于GO语言,遵循Apache2.0开源协议
容器:是一个沙箱,相互之间没有任何接口,自身性能开销极低
容器内部,其实是一个不全的linux内核系统(cgroups\namespace\UnionFS)
2.应用:
容器组为应用中间件
同一个硬件上运行更多容器
docker组成:
镜像image
文件镜像(就像纸张,他有不同的尺寸)
镜像:镜子中的图形
容器container
镜像运行的实体(由纸张组成的笔记本,不同尺寸 纸张,构成不同大小的笔记本)
仓库repository
镜像仓库(纸张不同大小,尺寸标签)
3.docker基本使用
https://hub.daocloud.io/
直接docker命令
docker pull 拉取镜像
docker images 查看镜像
docker rm/rmi 删除镜像
docker start/restart/stop
docker exec
一、环境准备
1.查看自己的系统版本
cat /etc/centos-release
2.查看系统内核版本
uname -a
如果满足docker的环境要求CentOS7.4+系统内核版本为 3.10 以上,就可以安装docker了
二、docker的安装
1.安装系统所依赖的工具需要
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
2.yum的配置管理,添加docker的软件源地址
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3.更新 yum 缓存
sudo yum makecache fast
4.可以查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r
5.安装docker
由于repo中默认只开启stable仓库,故这里安装的是最新版
sudo yum install docker-ce
6.启动docker服务
sudo systemctl start docker
7.加入开机启动项
sudo systemctl enable docker
8.查看版本
docker version
三、卸载docker
> 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
四、镜像的基本使用
Docker的三大核心概念:镜像、容器、仓库
1.镜像列表:
使用docker images查看本地已经下载的镜像
- REPOSITORY:表示镜像的仓库源
- TAG:镜像的标签,区分不同版本
- IMAGE ID:镜像ID,16进制组成,唯一标识
- CREATED:镜像创建时间
- SIZE:镜像大小
五、实例
1.安装centos
docker pull centos
docker run
–name=“mycentos” 容器名称
-d 后台运行
-it 进入容器
-p 映射端口
8080:8080
-p
随机端口
例如 300e315adb2f 镜像id
docker run --name=“mycentos” -it 300e315adb2f /bin/bash
2.查看正在运行的容器
docker ps
3.查看所有的容器
docker ps -a
4.退出不停止容器,如果不行检查快捷键冲突
crtl + p + q
5.删除容器
docker rm -f 387ca3f2f4e2
6.杀掉正在运行的容器
docker kill tender_wilson
docker kill 3c34e3f894e1
停止容器
docker stop 7afd270136b7
7.查看容器的日志
docker logs 容器id
docker logs 6d63ae544d70
动态查看后两条日志
docker logs -tf --tail 2 6d63ae544d70
8. 查看docker内部信息
docker top 容器id
docker top 6d63ae544d70
9.查看容器元信息
docker inspect 容器id
docker inspect 6d63ae544d70
10.进入正在运行的容器,新打开终端
docker exec it 容器id /bin/bash
docker exec -it 6d63ae544d70 /bin/bash
11.进入容器正在打开的终端
docker attach 容器id
docker attach 6d63ae544d70
12.把容器的文件拷贝到宿主机上docker外的linux上
实例2
安装nginx
docker pull nginx
docker run --name=mynginx -d -p 8081:80 nginx
检验nginx是否启动:
curl localhost:8081
或者通过浏览器打开:
实例3:打包提交一个自定义镜像
提交一个经过改造的tomcat镜像
1.首先下载一个 tomcat9.0版本
docker pull tomcat:9.0
2.启动tomcat
docker run -d --name=mytomcat -p 8082:8080 0ce438e89a29
3.访问网页:
4.此时的原因在于webapps目录下为空
5.现在把webapps.dist 下的文件复制到 webapps下 这样页面就可以正常显示了
docker exec -it 24bb29e186a2
cp -r webapps.dist/* webapps
6.再次查看页面:
7.提交修改后的tomcat镜像
docker commit -m="有首页的tomcat" -a="gy" 24bb29e186a2 gy_tomcat
8.启动这个镜像的容器
docker run -p 8090:8080 0a94f7236dc1
非后台运行
9.查看页面
六、容器数据卷
什么是容器数据卷?
比如你创建了一个mysql的容器,在里面新建数据库、表、数据,之后你想迁移数据或者升级数据库,直接把容器mysql容器删掉,里面的数据也会跟着被删除,这个时候如果可以把数据和容器分离,单独挂载一个数据卷,那么就能会好的应当这类问题
1.以tomcat为例
把tomcat的目录、user/local/tomcat/webapps映射到宿主机/test下
docker run -d -v /test:/usr/local/tomcat/webapps 0ce438e89a29
2.我在 test目录下新建一个文件a.txt在tomcat下的目录也可以看到,说明是同步的
3.我在docker下新建一个b.txt,也可以映射到/test目录下
七、docker安装mysql5.7
1.安装mysql:5.7
docker pull mysql:5.7
2.运行并映射mysql
映射到宿主机/test/datadir下
docker run --name some-mysql -p 3306:3306 -v /test/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
3.用Navicat链接mysql
4.进入到mysql中
docker exec -it fc868fa6ff8e /bin/bash
5.操作mysql