Docker应用场景
Web应用的自动化打包和发布
自动化测试和持续集成,发布
在服务器环境中部署和调整数据库或其他的后台应用
使用Docker可以实现开发人员的开发环境,测试环境运维人员的生成环境保持一致性
仓库(Repository)
仓库用户保持镜像,可以理解为代码控制中的代码仓库
** 镜像**
Dokcer镜像(Image)可以理解为创建Docker容器的模版(静态只读),相当于root文件系统
镜像产生容器
容器(container)
容器是一个运行时环境,是镜像的一个运行状态,他是镜像执行的动态表现
Docker常用指令
docker search tomcat #在docker Hub(https:hub.docker.com/)中搜索tomcat镜像
课程内容
- Docker各个应用场景
- Python+Paramiko实现远程操作
- Jenkins的FreeStyle,Pipline
Docker的特性与虚拟机的异同:
- 安装虚拟机软件如:VMware,在此虚拟机软件上安装操作系统(下载),把操作系统的虚拟机文件备份,随时复制并启动该操作系统。
- 在Linux上安装Docker软件,从镜像仓库拉取(Pull)操作系统或应用环境,基于该镜像文件创建一个容器(运行环境),备份容器以供下次使用(直接export容器,将容器提交(Commit)为本地镜像)。
- 虚拟机环境直接完全模拟一套全新的硬件环境,Docker环境不虚拟硬件,直接使用宿主机资源(Docker默认下不限制CPU,内存资源),也可以直接指定分配某个容器的CPU或内存资源。
- 虚拟机可以直接与宿主机或局域网连接,分配IP地址(Brige,NAT),Docker容器无法获取IP地址(跟随于宿主机的IP地址)。
- 镜像相当于是容器的模板,通过镜像创建容器,容器修改后也可提交为镜像,删除容器并不会删除镜像,删除镜像则无法创建容器。
容器使用注意事项:
- 尽量让一个容器做一件事情,或启动一个服务。
- 尽量使用挂载的方式将数据文件挂载到容器中,容器里面尽量不要保存数据。
- 尽量让容器按照Docker化的要求来使用容器,而不是安装一个虚拟机。
- 尽量不使用交互模式来直接操作容器,而是在宿主机上执行命令,或者使用Docker File。
- 只要能解决问题,高效地解决问题,无论怎么用,都行。
安装Docker:
- 安装网络相关命令:yum install net-tools
- 安装实用工具:yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加yum镜像:yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 更新yum缓存:yum makecache fast
- 安装docker-ce:yum -y install docker-ce
- 启动docker服务:systemctl start docker, 对应的还有stop, restart等
- 查看docker信息:docker info
- 查找centos可用镜像:docker search centos
- 镜像仓库地址:https://hub.docker.com https://hub.daocloud.io
- 注意事项:建议在CentOS 7版本上安装Docker,确保有足够的硬盘空间,确保内存和CPU资源足够。
- 查看Docker服务,systemctl list-unit-files | grep docker, 如果显示disabled, 说明Docker服务不会随操作系统的启动而自动启动。systemctl enable docker
快速验证安装是否成功:
- 搜索镜像:docker search hello-world
- 拉取镜像:docker pull hello-world,默认情况下,会拉取最新版本镜像,如果需要拉取指定版本,则必须指定TAG标签。
- 运行镜像:docker run hello-world
- 查看镜像:docker images
- 查看容器:docker ps, docker container ls -a
- 启停容器:docker start/stop/restart hello-world(容器名)
- 删除容器:docker rm 容器名 (可通过container ls -a查看)
- 删除镜像:docker rmi hello-world
安装MySQL 5.6:
- 从docker hub上拉取镜像:docker pull mysql:5.6.46
- 从daocloud上拉取镜像:docker pull daocloud.io/library/mysql:5.6.22
- 创建一个容器,并指定容器名称和主机名:docker create --name mysql-5.6 -h mysql56 daocloud.io/library/mysql:5.6.22 (可以理解为复制了一台虚拟机过来)
- 列出所有容器:docker container ls -a
- 查看目前正在运行的容器:docker ps
- 启动容器:docker start mysql-5.6 (可以理解为启动了一个虚拟机的概念),此时可通过docker ps查看容器启动状态
- 重新创建并启动:docker run --name mysql-5.6 -e MYSQL_ROOT_PASSWORD=123456 -d daocloud.io/library/mysql:5.6.22
- 删除一个容器:docker rm mysql-5.6
- 添加端口映射:
/var/lib/docker/containers/[hash_of_the_container]/hostconfig.json 修改为:"PortBindings":{"80/tcp":[{"HostIp":"","HostPort":"8080"}]}
并确认:ExposedPorts":{"3306/tcp":{}} 在config.v2.json 文件中。 - 停止容器:docker stop mysql-5.6,重启docker服务:systemctl restart docker,重启容器。
安装Tomcat8.0:
- 拉取镜像:docker pull daocloud.io/library/tomcat:8.0.23-jre8
- 解压War包到/mnt/tomcat/woniusales目录用于挂载到tomcat容器中:unzip -oq woniusales.war -d ./woniusales
- 创建并启动:docker run --name tomcat-8.0 -h tomcat80 -p 8081:8080 -d -v /mnt/tomcat/woniusales:/usr/local/tomcat/webapps/woniusales daocloud.io/library/tomcat:8.0.23-jre8
- 修改db.properties文件,确保连接到正确的MySQL数据库上。(可以docker exec -it tomcat-8.0 bash进入交互模式,也可以直接在宿主机上修改)
- 重启容器: docker restart tomcat-8.0
直接安装裸CentOS并自已配置环境:
- 拉取CentOS7.6镜像:docker pull daocloud.io/library/centos:7.6.1810
- 创建并启动镜像,考虑到需要启动MySQL,所以需要使用特权模式:--privileged=true centos:7.6.1810 /sbin/init
特殊场景:
- 特权模式:docker run -tid --name centos-all -p 8081:8080 -p 23:22 -p 3307:3306 --privileged=true centos:7.6.1810 /sbin/init,(如果不使用特权模式,则MySQL将无法作为后台服务来启动 systemctl start serviceName).
- 限制CPU和内存:https://www.cnblogs.com/zhuochong/p/9728383.html
- 环境变量 -e JAVA_HOME=/opt/jdk
- 自动启动 /etc/rc.d/rc.local 开机自动运行脚本:chmod +x /etc/rc.d/rc.local
- 配置基于Ubuntu的vnc server,可通过VNC Viewer或Web页面直接操作Ubuntu的界面,适用于构建一些临时的实验环境:
docker run --name ubuntu-vnc -d -p 6080:80 -p 5900:5900 -e VNC_PASSWORD=123456 -e RESOLUTION=1440x900 -v /dev/shm:/dev/shm dorowu/ubuntu-desktop-lxde-vnc - 如何将宿主机目录与容器内目录进行交换?可视化你的容器内容!
这样的场景是比较多的:
比如为了统一管理安装包,不让所有安装包散乱在各个容器的各个目录;
比如为了让容器的数据存储使用一块新买的磁盘;
比如我想复制同一份代码到新容器使用,从而方便后续独立修改;
比如你无法进入你的容器,却想拿到其中的数据等等;
所以,我们需要使用到目录映射功能,这是 docker 自带的功能,方便实用: -v 参数设置即可. - 查看容器的资源使用率:docker stats --no-stream
- 查看容器IP地址:docker inspect mysql-5.6 | grep IPAddress
- 复制文件到容器中:docker cp /host/file container:/docker/file
- 容器或镜像的导出,导入:docker export, import, save, load.
- 将容器提交为镜像:docker commit 容器名称 镜像名称:TAG
独立安装MySQL:
- 查询已安装的mysql:rpm –qa | grep mysql
- 安装种子文件:rpm -ivh mysql-community-release-el7-5.noarch.rpm
- 查看或编辑源,确认安装了正确的版本:/etc/yum.repos.d/mysql-community.repo
- 安装MySQL:yum install -y mysql-server
- 检查是否安装成功:chkconfig –list | grep mysqld (CentOS 6)或 systemctl list-unit-files | grep mysql (CentOS 7)
- 启动MySQL:service mysqld status 或 systemctl start mysqld
- 关闭防火墙:service iptables stop 或 systemctl stop firewalld
- 设置开机启动MySQL(默认为自启动):systemctl enable mysqld
- 修改Root用户密码:mysqladmin -u root password '123456'
- 登录MySQL交互式命令行:mysql –u root –p
- 出于安全考虑,默认root用户不能远程访问mysql,为方便学习,解决办法:
GRANT ALL PRIVILEGES ON . TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
flush privileges; - 使用远程连接工具如navicat等连接到MySQL,成功则表达过程没有问题。
- 如果是在Docker中安装MySQL,则需要注意以下几点:
必须将3306的端口映射到宿主机上
必须将Docker容器设置为特权模式,才能启动MySQL服务
独立安装Tomcat:
- 操作方式与安装MySQL类似,需要注意的几个关键步骤:
必须将8080端口映射到宿主机上
建议webapps目录挂载到宿主机上
建议配置/etc/rc.d/rc.local文件,设置环境变量并授予可执行权限,这样可以让tomcat随容器自启动
需要安装JDK并配置JAVA_HOME和CATALINA_HOME - 建议不要把Docker当成虚拟机来运行,保持Docker化,但是特殊情况下也无所谓。
CentOS 6与7版本关于服务处理的命令:
任务 旧指令 新指令
使某服务自动启动 chkconfig --level 3 httpd on systemctl enable httpd.service
使某服务不自动启动 chkconfig --level 3 httpd off systemctl disable httpd.service
检查服务状态 service httpd status systemctl status httpd.service (服务详细信息) systemctl is-active httpd.service (仅显示是否 Active)
显示所有已启动服务 chkconfig --list systemctl list-units --type=service
启动某服务 service httpd start systemctl start httpd.service
停止某服务 service httpd stop systemctl stop httpd.service
重启某服务 service httpd restart systemctl restart httpd.service
基于Docker的持续集成过程:
- 利用Python的paramiko库通过命令直接操作
- 利用Jenkins的SSH插件直接通过命令操作
- 建议观看直播回放视频:http://www.woniuxy.com/live/20 ,则可以与本次直播课程有更好的结合。
- Docker命令及参数使用大全:https://www.w3cschool.cn/docker/docker-command-manual.html
- Docker File用于构建镜像,通过一系列指令,基于某一个原始镜像来创建一个新的镜像,基于文本文件,维护比较方便,构建比较灵活。[root@mycentos tool]# vi Dockerfile
FROM daocloud.io/library/centos:7.6.1810
RUN yum install -y net-tools
&& yum install -y unzip