目录
一、什么是Docker
1、虚拟环境:
2、Docker的特性与虚拟机的异同:
3、容器使用注意事项:
二、安装过程
三、镜像与容器操作:
四、在Docker中安装配置WoniuSales
五、镜像的自启动与还原
六、Docker化运行与部署环境
一、什么是Docker
1、虚拟环境:
(1)完整模拟硬件的虚拟环境:VMWare,Hyper-V,Virtual-Box,VMServer等。
(2)不模拟硬件,只把虚拟环境当成一个应用程序(进程)来对待:Docker,非常轻量级的虚拟环境。
(3)在VMWare中安装一个Linux,标配10G+、最小化安装近2G,而在Docker中,安装一个最小化CentOS或Ubuntu,大概只需要200M。
2、Docker的特性与虚拟机的异同:
(1)安装虚拟机软件如:VMware,在此虚拟机软件上安装操作系统(下载),把操作系统的虚拟机文件备份,随时复制并启动该操作系统。
(2)在Linux上安装Docker软件,从镜像仓库拉取(Pull)操作系统或应用环境,基于该镜像文件创建一个容器(运行环境),备份容器以供下次使用(直接export容器,将容器提交(Commit)为本地镜像)。
(3)虚拟机环境直接完全模拟一套全新的硬件环境,Docker环境不虚拟硬件,直接使用宿主机资源(Docker默认下不限制CPU,内存资源),也可以直接指定分配某个容器的CPU或内存资源。
(4)虚拟机可以直接与宿主机或局域网连接,分配IP地址(Brige,NAT),Docker容器无法获取IP地址(跟随于宿主机的IP地址)。
(5)镜像相当于是容器的模板,通过镜像创建容器,容器修改后也可提交为镜像,删除容器并不会删除镜像,删除镜像则无法创建容器。
Docker与Docker之间可以互相通信:依赖于宿主机的网关。Docker与宿主机之间可以互相通信,外部设备无法直接访问Docker,必须把端口映射给宿主机,所以Docker的端口必须保持在宿主机上的唯一性。
3、容器使用注意事项:
(1)尽量让一个容器做一件事情,或启动一个服务。
(2)尽量使用挂载的方式将数据文件挂载到容器中,容器里面尽量不要保存数据。
(3)尽量让容器按照Docker化的要求来使用容器,而不是安装一个虚拟机。
(4)尽量不使用交互模式来直接操作容器,而是在宿主机上执行命令,或者使用Docker File。
(5)只要能解决问题,高效地解决问题,无论怎么用,都行。
二、安装过程
1、确保Linux内核3.X版本及以上,建议使用CentOS 7.X,64位。
2、先安装一些必备工具包:
- 安装网络相关命令:yum install net-tools
- 安装实用工具:yum install -y yum-utils device-mapper-persistent-data lvm2
3、配置yum下载源:
- 添加yum镜像:yum-config-manager —add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 更新yum缓存:yum makecache fast
4、安装Docker社区版:
安装docker-ce:yum -y install docker-ce
5、关于Docker服务启停
systemctl start/stop/restart/status docker
6、配置Docker的国内镜像
vi /etc/docker/daemon.json
{ "registry-mirrors": [ "https://registry.docker-cn.com", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn" ] }{ "registry-mirrors": [ "https://registry.docker-cn.com", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn" ] }{ "registry-mirrors": [ "https://registry.docker-cn.com", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn" ] }
保存,重启Docker,查看docker info是否生效
三、镜像与容器操作:
1、镜像(Image):
Docker相关站点事先制作好的带有操作系统或应用程序的一个文件包,下载回来后便可以启动Docker运行环境,类似于VMWare中的一个预先安装好虚拟机的虚拟机文件。自己也可以在自己的私有环境中制作镜像,供别人使用。通常的两个用于下载Docker镜像的知名站点:https://hub.docker.com/ (速度极慢,不推荐),Hub · DaoCloud (国内镜像,推荐)
查找centos可用镜像:docker search centos
摘取镜像:docker pull centos:latest
2、容器(Container):
镜像的具体可启动的实例:容器要有名称便于唯一区分,如果需要外部访问,则必须映射端口,如果要共享文件夹,还需要做文件映射夹,等等。。。。。
创建容器:docker create -it —name centos8 -h mycentos8 -p 3307:3306 centos:latest
查看容器:docker container ls -a
启动容器:docker start centos8
3、实例:
查看正在运行的容器:docker ps
交互模式进入Docker容器内的命令行:docker exec -it centos8 /bin/bash
4、宿主机与容器之间交换文件
docker cp 宿主机文件 容器名:文件路径
Docker常用命令及参数:Docker 命令大全 | 菜鸟教程
5、利用run命令一次处理 create + start:
创建并启动一个容器:docker run -it —name centos8 -h mycentos8 -p 3307:3306 centos:latest
另外,可以使用 docker run —rm 来创建和启动容器,—rm参数表示:退出容器时不保存数据。
6、在CentOS:Latest版本中安装MySQL 5.6:安装成8.0的MySQL,无法安装MySQL5.6版本,安装后无法启动MySQL服务。
四、在Docker中安装配置WoniuSales
1、拉取镜像:docker pull centos:centos7.9.2009
2、创建容器:docker create -it —name centos7.9 -h mycentos7 -p 3307:3306 -p 8081:8080 centos:centos7.9.2009
3、启动容器:docker start centos8
4、将MySQL 5.6的rpm源复制到容器中:docker cp ~/mysql57-community-release-el7-10.noarch.rpm centos7.9:/opt/
4、进入容器:docker exec -it centos8 /bin/bash
5、在容器中的命令提示符下安装 MySQL:
安装源:rpm -ivh /opt/mysql57-community-release-el7-10.noarch.rpm 编辑源:/etc/yum.repos.d/mysql-community.repo,将5.6版本的enabled设置为1 清空缓存:yum clean all 安装MySQL:yum install mysql-server -y 启动MySQL服务:systemctl status mysqld Failed to get D-Bus connection: Operation not permitted 发现此时无法启动MySQL,主要是因为默认的配置下,Docker不具备一台独立主机的所有功能,需要使用特权模式解决安装源:rpm -ivh /opt/mysql57-community-release-el7-10.noarch.rpm 编辑源:/etc/yum.repos.d/mysql-community.repo,将5.6版本的enabled设置为1 清空缓存:yum clean all 安装MySQL:yum install mysql-server -y 启动MySQL服务:systemctl status mysqld Failed to get D-Bus connection: Operation not permitted 发现此时无法启动MySQL,主要是因为默认的配置下,Docker不具备一台独立主机的所有功能,需要使用特权模式解决安装源:rpm -ivh /opt/mysql57-community-release-el7-10.noarch.rpm 编辑源:/etc/yum.repos.d/mysql-community.repo,将5.6版本的enabled设置为1 清空缓存:yum clean all 安装MySQL:yum install mysql-server -y 启动MySQL服务:systemctl status mysqld Failed to get D-Bus connection: Operation not permitted 发现此时无法启动MySQL,主要是因为默认的配置下,Docker不具备一台独立主机的所有功能,需要使用特权模式解决
6、使用特权模式创建Docker容器
停止容器:docker stop centos8 删除容器:docker rm centos8 特权模式创建容器:docker create -ti --name centos7.9 -h mycentos7 --privileged=true -p 3307:3306 -p 8081:8080 centos:centos7.9.2009 /sbin/init 启动容器:docker start centos7.9 进入容器:docker exec -it centos8 /bin/bash停止容器:docker stop centos8 删除容器:docker rm centos8 特权模式创建容器:docker create -ti --name centos7.9 -h mycentos7 --privileged=true -p 3307:3306 -p 8081:8080 centos:centos7.9.2009 /sbin/init 启动容器:docker start centos7.9 进入容器:docker exec -it centos8 /bin/bash停止容器:docker stop centos8 删除容器:docker rm centos8 特权模式创建容器:docker create -ti --name centos7.9 -h mycentos7 --privileged=true -p 3307:3306 -p 8081:8080 centos:centos7.9.2009 /sbin/init 启动容器:docker start centos7.9 进入容器:docker exec -it centos8 /bin/bash
7、按照正常流程安装MySQL并使用 systemctl start mysqld 启动,在特权模式下将可以正常启动。
8、授权远程登录用户:
GRANT ALL PRIVILEGES ON *.* TO 'qiang'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; flush privileges;GRANT ALL PRIVILEGES ON *.* TO 'qiang'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; flush privileges;GRANT ALL PRIVILEGES ON *.* TO 'qiang'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION; flush privileges;
9、远程利用Navicat登录,创建数据库woniusales,并运行SQL语句生成数据。
10、复制JDK、Tomcat和Woniusales.war文件到容器中
11、解压JDK,并在~/.bash_profile文件中配置环境变量:
export JAVA_HOME=/opt/jdk1.8.0_211 PATH=$PATH:$HOME/bin:$JAVA_HOME/bin export PATHexport JAVA_HOME=/opt/jdk1.8.0_211 PATH=$PATH:$HOME/bin:$JAVA_HOME/bin export PATHexport JAVA_HOME=/opt/jdk1.8.0_211 PATH=$PATH:$HOME/bin:$JAVA_HOME/bin export PATH
12、运行source .bash_profile使环境变量生效
13、解压Tomcat,并将woniusales.war复制到webapps目录下,启动Tomcat
14、配置数据库连接信息,重启Tomcat,完成。
五、镜像的自启动与还原
1、配置镜像的自启动脚本
在Linux中,哪些脚本可以实现自启动:
/etc/rc.d/rc.local:系统在启动时进行加载执行,/etc/rc.local是本文件的软链接文件。 /etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。 /etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。 ~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。 ~/.bashrc: 该文件包含专用于你用户的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。 ~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件. 上述脚本的执行前提:必须拥有可执行权限或在特定的条件下触发执行。/etc/rc.d/rc.local:系统在启动时进行加载执行,/etc/rc.local是本文件的软链接文件。 /etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。 /etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。 ~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。 ~/.bashrc: 该文件包含专用于你用户的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。 ~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件. 上述脚本的执行前提:必须拥有可执行权限或在特定的条件下触发执行。/etc/rc.d/rc.local:系统在启动时进行加载执行,/etc/rc.local是本文件的软链接文件。 /etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。 /etc/bashrc: 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取。 ~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次。 ~/.bashrc: 该文件包含专用于你用户的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。 ~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件. 上述脚本的执行前提:必须拥有可执行权限或在特定的条件下触发执行。
按照以下指令设置启动容器时即启动Tomcat
编辑 /etc/rc.d/rc.local,添加以下指令 export JAVA_HOME=/opt/jdk1.8.0_211 PATH=$PATH:$HOME/bin:$JAVA_HOME/bin export PATH /opt/apache-tomcat-8.0.47/bin/startup.sh 然后 授权 /etc/rc.d/rc.local 可执行权限 chmod u+x /etc/rc.d/rc.local编辑 /etc/rc.d/rc.local,添加以下指令 export JAVA_HOME=/opt/jdk1.8.0_211 PATH=$PATH:$HOME/bin:$JAVA_HOME/bin export PATH /opt/apache-tomcat-8.0.47/bin/startup.sh 然后 授权 /etc/rc.d/rc.local 可执行权限 chmod u+x /etc/rc.d/rc.local编辑 /etc/rc.d/rc.local,添加以下指令 export JAVA_HOME=/opt/jdk1.8.0_211 PATH=$PATH:$HOME/bin:$JAVA_HOME/bin export PATH /opt/apache-tomcat-8.0.47/bin/startup.sh 然后 授权 /etc/rc.d/rc.local 可执行权限 chmod u+x /etc/rc.d/rc.local
2、将容器提交为镜像
docker commit -a "Author" -m "Description" centos7.9 woniusales:1.4docker commit -a "Author" -m "Description" centos7.9 woniusales:1.4docker commit -a "Author" -m "Description" centos7.9 woniusales:1.4
3、将镜像进行归档压缩
docker save -o /opt/woniusales-centos7.9.tar woniusales:1.4 gzip woniusales-centos7.9.tardocker save -o /opt/woniusales-centos7.9.tar woniusales:1.4 gzip woniusales-centos7.9.tardocker save -o /opt/woniusales-centos7.9.tar woniusales:1.4 gzip woniusales-centos7.9.tar
4、从归档或压缩文件还原镜像
docker load -i woniusales-centos7.9.tar.gzdocker load -i woniusales-centos7.9.tar.gzdocker load -i woniusales-centos7.9.tar.gz
5、创建并启动容器,实现WoniuSales的访问
创建容器:docker create -ti --name woniusales -h woniusales --privileged=true -p 3308:3306 -p 8082:8080 woniusales:1.4 /sbin/init 启动容器:docker start centos7.9创建容器:docker create -ti --name woniusales -h woniusales --privileged=true -p 3308:3306 -p 8082:8080 woniusales:1.4 /sbin/init 启动容器:docker start centos7.9创建容器:docker create -ti --name woniusales -h woniusales --privileged=true -p 3308:3306 -p 8082:8080 woniusales:1.4 /sbin/init 启动容器:docker start centos7.9
六、Docker化运行与部署环境
1、每一个Docker解决一个问题
针对WoniuSales的环境配置,分三步:
(1)下载一个包含MySQL 5.6的Docker镜像,并映射端口3306,再启动即可。
docker pull daocloud.io/library/mysql:5.6.36 docker run --name mysql5.6 -h mysql56 -e MYSQL_ROOT_PASSWORD=123456 -p 3309:3306 -d daocloud.io/library/mysql:5.6.3docker pull daocloud.io/library/mysql:5.6.36 docker run --name mysql5.6 -h mysql56 -e MYSQL_ROOT_PASSWORD=123456 -p 3309:3306 -d daocloud.io/library/mysql:5.6.3docker pull daocloud.io/library/mysql:5.6.36 docker run --name mysql5.6 -h mysql56 -e MYSQL_ROOT_PASSWORD=123456 -p 3309:3306 -d daocloud.io/library/mysql:5.6.3
使用navicat,远程连接MySQL,用户名:root,密码:123456,并创建WoniuSales数据库。
(2)下载一个包含Tomcat 8.0的Docker镜像,并映射端口8080,再启动即可。
拉取镜像:docker pull daocloud.io/library/tomcat:8.0.45-jre8-alpine 创建挂载目录:mkdir /opt/webapps 复制war文件:cp ~/woniusales.war /opt/webapps 创建容器:docker create -it --name tomcat8.0 -h mytomcat8 -p 8083:8080 -v /opt/webapps/:/usr/local/tomcat/webapps daocloud.io/library/tomcat:8.0.45-jre8-alpine 启动容器:docker start tomcat8.0拉取镜像:docker pull daocloud.io/library/tomcat:8.0.45-jre8-alpine 创建挂载目录:mkdir /opt/webapps 复制war文件:cp ~/woniusales.war /opt/webapps 创建容器:docker create -it --name tomcat8.0 -h mytomcat8 -p 8083:8080 -v /opt/webapps/:/usr/local/tomcat/webapps daocloud.io/library/tomcat:8.0.45-jre8-alpine 启动容器:docker start tomcat8.0拉取镜像:docker pull daocloud.io/library/tomcat:8.0.45-jre8-alpine 创建挂载目录:mkdir /opt/webapps 复制war文件:cp ~/woniusales.war /opt/webapps 创建容器:docker create -it --name tomcat8.0 -h mytomcat8 -p 8083:8080 -v /opt/webapps/:/usr/local/tomcat/webapps daocloud.io/library/tomcat:8.0.45-jre8-alpine 启动容器:docker start tomcat8.0
(3)在Tomcat的Docker中,配置数据库连接信息并重启Docker,完成配置。
docker exec -it mysql5.6 /bin/bash 执行 ip addr 查看IP地址: 172.17.0.2 修改宿主机上的:/opt/webapps/woniusales/WEB-INF/classes/db.properties 内容如下: db_url=jdbc:mysql://172.17.0.2:3306/woniusales?useUnicode=true&characterEncoding=utf8 db_username=root db_password=123456 db_driver=com.mysql.jdbc.Driverdocker exec -it mysql5.6 /bin/bash 执行 ip addr 查看IP地址: 172.17.0.2 修改宿主机上的:/opt/webapps/woniusales/WEB-INF/classes/db.properties 内容如下: db_url=jdbc:mysql://172.17.0.2:3306/woniusales?useUnicode=true&characterEncoding=utf8 db_username=root db_password=123456 db_driver=com.mysql.jdbc.Driverdocker exec -it mysql5.6 /bin/bash 执行 ip addr 查看IP地址: 172.17.0.2 修改宿主机上的:/opt/webapps/woniusales/WEB-INF/classes/db.properties 内容如下: db_url=jdbc:mysql://172.17.0.2:3306/woniusales?useUnicode=true&characterEncoding=utf8 db_username=root db_password=123456 db_driver=com.mysql.jdbc.Driver
2、使用Docker File进行批处理
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
[root@localhost ~]# cd /opt/ [root@localhost opt]# mkdir nginx ##创建Nginx目录 [root@localhost opt]# cd nginx/ [root@localhost nginx]# vim Dockerfile FROM centos:7 MAINTAINER The is nginx <xu> RUN yum install -y proc-devel gcc gcc-c++ zlib zlib-devel make openssl-devel wget ADD nginx-1.12.2.tar.gz /usr/local WORKDIR /usr/local/nginx-1.12.2/ RUN ./configure --prefix=/usr/local/nginx && make && make install EXPOSE 80 EXPOSE 443 RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf WORKDIR /root/nginx ADD run.sh /run.sh RUN chmod 755 /run.sh CMD ["/run.sh"] [root@localhost nginx]# vim run.sh #!/bin/bash /usr/local/nginx/sbin/nginx ##开启Nginx服务 [root@localhost nginx]# mount.cifs //192.168.100.3/LNMP-C7 /mnt/ ##挂载镜像 Password for root@//192.168.100.3/LNMP-C7: [root@localhost nginx]# cp /mnt/nginx-1.12.2.tar.gz ./ ##复制到当前目录下 [root@localhost nginx]# docker build -t nginx:new . ##创建镜像 [root@localhost nginx]# docker run -d -P nginx:new ##创建容器 228c1f5b8070d52c6f19d03159ad93a60d682a586c0b1f944dc651ee40576a3e [root@localhost nginx]# docker ps -a ##查看容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 228c1f5b8070 nginx:new "/run.sh" 9 seconds ago Up 8 seconds 0.0.0.0:32770->80/tcp, 0.0.0.0:32769->443/tcp busy_booth ##用浏览器访问网页[root@localhost ~]# cd /opt/ [root@localhost opt]# mkdir nginx ##创建Nginx目录 [root@localhost opt]# cd nginx/ [root@localhost nginx]# vim Dockerfile FROM centos:7 MAINTAINER The is nginx <xu> RUN yum install -y proc-devel gcc gcc-c++ zlib zlib-devel make openssl-devel wget ADD nginx-1.12.2.tar.gz /usr/local WORKDIR /usr/local/nginx-1.12.2/ RUN ./configure --prefix=/usr/local/nginx && make && make install EXPOSE 80 EXPOSE 443 RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf WORKDIR /root/nginx ADD run.sh /run.sh RUN chmod 755 /run.sh CMD ["/run.sh"] [root@localhost nginx]# vim run.sh #!/bin/bash /usr/local/nginx/sbin/nginx ##开启Nginx服务 [root@localhost nginx]# mount.cifs //192.168.100.3/LNMP-C7 /mnt/ ##挂载镜像 Password for root@//192.168.100.3/LNMP-C7: [root@localhost nginx]# cp /mnt/nginx-1.12.2.tar.gz ./ ##复制到当前目录下 [root@localhost nginx]# docker build -t nginx:new . ##创建镜像 [root@localhost nginx]# docker run -d -P nginx:new ##创建容器 228c1f5b8070d52c6f19d03159ad93a60d682a586c0b1f944dc651ee40576a3e [root@localhost nginx]# docker ps -a ##查看容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 228c1f5b8070 nginx:new "/run.sh" 9 seconds ago Up 8 seconds 0.0.0.0:32770->80/tcp, 0.0.0.0:32769->443/tcp busy_booth ##用浏览器访问网页[root@localhost ~]# cd /opt/ [root@localhost opt]# mkdir nginx ##创建Nginx目录 [root@localhost opt]# cd nginx/ [root@localhost nginx]# vim Dockerfile FROM centos:7 MAINTAINER The is nginx <xu> RUN yum install -y proc-devel gcc gcc-c++ zlib zlib-devel make openssl-devel wget ADD nginx-1.12.2.tar.gz /usr/local WORKDIR /usr/local/nginx-1.12.2/ RUN ./configure --prefix=/usr/local/nginx && make && make install EXPOSE 80 EXPOSE 443 RUN echo "daemon off;">>/usr/local/nginx/conf/nginx.conf WORKDIR /root/nginx ADD run.sh /run.sh RUN chmod 755 /run.sh CMD ["/run.sh"] [root@localhost nginx]# vim run.sh #!/bin/bash /usr/local/nginx/sbin/nginx ##开启Nginx服务 [root@localhost nginx]# mount.cifs //192.168.100.3/LNMP-C7 /mnt/ ##挂载镜像 Password for root@//192.168.100.3/LNMP-C7: [root@localhost nginx]# cp /mnt/nginx-1.12.2.tar.gz ./ ##复制到当前目录下 [root@localhost nginx]# docker build -t nginx:new . ##创建镜像 [root@localhost nginx]# docker run -d -P nginx:new ##创建容器 228c1f5b8070d52c6f19d03159ad93a60d682a586c0b1f944dc651ee40576a3e [root@localhost nginx]# docker ps -a ##查看容器 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 228c1f5b8070 nginx:new "/run.sh" 9 seconds ago Up 8 seconds 0.0.0.0:32770->80/tcp, 0.0.0.0:32769->443/tcp busy_booth ##用浏览器访问网页
原文链接:https://blog.51cto.com/u_16099225/11339531