Docker第二章:Docker镜像、容器卷、单机tomcat、mysql、redis安装
镜像
一种轻量级、可执行的独立软件包,我们把应用程序和配置依赖打包形成一个可交付的运行环境(包括代码、运行时所需的库、环境变量和配置文件等),这个打包好的运行环境就是image镜像文件
整体流程
搜索镜像——>拉取镜像——>查看镜像——>启动容器——>停止容器——>移除容器
镜像分层
UnionFS(联合文件系统):是一种分层、轻量级且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下。Union文件系统是Docker镜像的基础,镜像可以通过分层来进行继承。
系统启动引导加载过程
bootfs(boot file system)主要包含bootloader(加载器)和kernel(内核), bootloader(加载器)主要是引导加载kernel(内核), Linux刚启动时会加载bootfs文件系统,Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含bootloader(加载器)和kernel(内核)。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs(平时开机即启动系统时需要用到bootloader(加载器),开机的速度非常的久,但Docker的容器的内核用的是主机的内核,主机已经启动内核,容器不需要再用到bootloader(加载器)来启动内核,所以Docker容器的启动速度非常的快)
rootfs
rootfs (root file system),在bootfs之上。包含的就是典型Linux系统中的/dev, /proc, /bin, /etc等标准目录和文件,简单来说rootfs就是各种不同的操作系统发行版,比如Ubuntu , Centos等等。
Docker commit 命令——以commit centos(添加vim)为例
docker commit -m="提交内容" -a="作者" 容器ID 要创建的目标镜像名:[标签名]
1:pull下一个原生的ubuntu
2:docker run -it ubuntu
3:apt-get update
4:apt-get -y install vim
5:docker commit -m="add vim cmd" -a="zyt" 38c41cc5c04e zyt/myubuntu:1.3
6:docker images
7:docker run -it 57f3713ff043 /bin/bash
镜像推送
推送镜像上阿里云、拉取镜像
1:创建阿里云上公开仓库
2:参考https://cr.console.aliyun.com/repository/cn-hangzhou/zhuyitian8/myubuntu/details
3:docker login --username=xxxx registry.cn-hangzhou.aliyuncs.com
4:docker tag 57f3713ff043 registry.cn-hangzhou.aliyuncs.com/zhuyitian8/myubuntu:1.3
5:docker push registry.cn-hangzhou.aliyuncs.com/zhuyitian8/myubuntu:1.3
6:docker rmi -f 57f3713ff043
7:docker pull registry.cn-hangzhou.aliyuncs.com/zhuyitian8/myubuntu:1.3
私有云
Docker Registry是官方提供的工具,可以用于构建私有镜像仓库
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 --name=容器名 镜像名
1:docker pull registry
2:docker run -d -p 5000:5000 -v /zyt/myregistry/:/tmp/registry --privileged=true registry
3:docker ps,确认本地私有库已运行
4:docker run -it ubuntu /bin/bash(id:377f336bd157)
5:apt-get update
6:apt-get install net-tools
7:ifconfig——确认上述安装成功
8:docker commit -m "ifconfig add cmd" -a="zyt" 377f336bd157 zytubuntu:1.2
9:docker images——确认镜像commit成功
10:docker stop 377f336bd157
11:curl -XGET http://10.0.16.8:5000/v2/_catalog——中间的10.0.16.8为本机的ip,确认仓库为空
12:docker tag zytubuntu:1.2 10.0.16.8:5000/zytubuntu:1.2——docker tag 镜像:Tag Host:Port/Repository:Tag
13:修改配置文件使之支持http
1:cat /etc/docker/daemon.json
2:添加以下语句——"insecure-registries": ["10.0.16.8:5000"]
14:systemctl restart docker——重启docker
15:systemctl status docker——查看状态
16:docker run -d -p 5000:5000 -v /zyt/myregistry/:/tmp/registry --privileged=true registry
17:docker push 10.0.16.8:5000/zytubuntu:1.2
18:curl -XGET http://10.0.16.8:5000/v2/_catalog——发现多出了一个镜像
19:docker rmi -f 10.0.16.8:5000/zytubuntu:1.2
20:docker rmi -f zytubuntu:1.2
21:docker pull 10.0.16.8:5000/zytubuntu:1.2
22:docker run -it 10.0.16.8:5000/zytubuntu:1.2 /bin/bash
23:docker ps
注意事项
容器卷
宿主机绝对路径目录与容器内目录好比链接,在其中一个新建文件等,另一个也会有
以下-v代表整容器卷,:rw代表宿主机目录可读可写,容器卷目录可读可写;:ro代表容器卷内只可读
docker run -it --privileged=true -v 宿主机目录:容器内目录:rw --name=容器名 镜像名
1:docker run -it --privileged=true -v /zyt/links:/tmp/links:rw ubuntu /bin/bash
2:docker inspect 容器ID
3:touch /tmp/links/aa.txt——执行过后,主目录的/zyt/links也会生成aa.txt文件
容器继承
docker run -it --privileged=true -v 宿主机目录:容器内目录:rw --volumes-from 父类名 --name=容器名 镜像名
安装tomcat
1:查找tomcat镜像
2:docker pull tomcat
3:docker images确认镜像是否拉取成功
4:docker run -it -p 8080:8080 --name=t1 tomcat
5:rm -r webapps
6:mv webapps.dist/ webapps
7:以上为拉取最新版tomcat
8:docker pull billygoo/tomcat8-jdk8——免修改版拉取
9:docker run -d -p 8080:8080 --name=mytomcat8 billygoo/tomcat8-jdk8——返回a2c7f61d5408c486f389ae40cc1d2c5589505721ee2a9ec164768decc
10:docker exec -it a2c7f61d5408c486f389ae40cc1d2c5589505721ee2a9ec164768decc13ef5be /bin/bash
11:网页打开IP:8080,确认tomcat8启动成功
安装mysql(以安装5.7为例)
1:docker pull mysql:5.7
2:mysqld stop service
3:netstat -tanlp——确认3306端口进程是否完毕
4:kill 1124
5:docker run -p 3306:3306 --privileged=true -v /zyt/mysql/log:/var/log/mysql -v /zyt/mysql/data:/var/lib/mysql -v /zyt/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7——返回be36d59410db
6:vim /zyt/mysql/conf/my.cnf(mysql8中注意要更改/etc/my.cnf文件),输入以下内容,为此解决中文乱码问题
[client] default_character_set = utf8 [mysqld] collation_server = utf8_general_ci character_set_server = utf8
7:docker restart mysql容器名
安装Redis(版本6.2.7,因本机redis版本为6.2.7,与redis.conf有关,需保持双方版本一致)
1:docker pull redis:6.2.7
2:cp /export/server/redis-6.2.7/redis.conf /zyt/redis/——拷贝现有机器redis.conf到宿主机数据卷目录
3:拷贝过来的redis.conf文件需要做以下操作
1:注释掉bind 127.0.0.1
2:设置daemonize no——>将yes改为no
3:protected-mode no——>将yes改为no(非本机连接redis需关)
4:若6379本地redis在用,则使用ps -ef | grep redis、kill -9 xxx杀掉对应端口进程
5:docker run -p 6379:6379 --name myr3 --privileged=true -v /zyt/redis/redis.conf:/etc/redis/redis.conf -v /zyt/redis/data:/data redis:6.2.7 redis-server /etc/redis/redis.conf
6:docker exec -it myr3 /bin/bash
7:redis-cli