linux部署软件时经常出现软件版本不统一的情况,为了版本控制着和跨平台性,现在企业中大多都是用docker在服务器上快速来部署软件.
docker主要由下面几部分组成:
client客户端用于输入命令行
registry镜像仓库,相当于maven的远程仓库,国外网站速度较慢,可配置成国内的镜像地址,比如阿里云镜像等
docker_host服务端,其中又包含docker deamon用于监听命令行,images镜像库(本地的)相当于maven的本地仓库,containers容器,容器彼此都是隔离的,一般一个容器内只放一个程序.
当运行一个版本的程序时,首先客户端发送一个运行程序的命令,服务端deamon接收到命令,去本地images中查找是否有该版本的程序,如果没有就会从远端registry镜像仓库中拉取一个到本地images,然后使用镜像运行出一个容器container,然后开放防火墙端口映射就可以访问该版本的程序了
CentOS7 安装Docker
yum install -y yum-utils device-mapper-persistent-data lvm2 安装需要多的软件包
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 设置yum源
yum install -y docker-ce 安装docker ,所有输入界面都是同意y
docker -v 查看docker版本,验证是否成功
systemctl start docker 启动docker环境
systemctl enable docker 设置开机自启动
默认都是从docker hub上下载镜像,需要修改/etc/docker/daemon.json文件
{
"registry-mirrors":["http://hub-mirror.c.163.com"]
} 如网易云镜像地址
配置修改完成后需要重启docker 即输入命令systemctl restart docker
docker info 查看是否成功
进程相关命令(linux中的通用命令,docker可以换成其他程序的名称)
systemctl start docker 启动服务
systemctl stop docker 停止服务
systemctl restart docker 重启服务
systemctl status docker 查看服务的状态
systemctl enable docker 设置开机自启动
镜像相关命令
docker images查看本地镜像
docker search 镜像名称 搜索镜像仓库
docker pull 镜像名称 下载镜像,镜像名称格式为 名称:版本号 例如 nginx:1.18.0
docker rmi 镜像名称 删除镜像
容器相关命令
docker ps 查看正在运行的容器
docker ps -a 查看所有容器,包含运行的和停止的
docker run -d -p 80:80 --name=容器名 镜像名称 创建一个新的容器并运行(-d 后台运行容器,并返回容器ID -p 主机端口:容器端口 指定映射关系) 容器名为自己给docker中的程序命的命比如mynginx
docker exec -it 容器名称 /bin/bash 进入到容器内部 exit退出容器
docker inspect 容器名称 查看容器信息
docker start 容器名称 启动容器
docker stop 容器名称 停止容器
docker rm 容器名称 删除容器
部署mysql
docker search mysql 搜索mysql镜像
docker pull mysql:5.7 拉取mysql镜像
docker run -d -p 3306:3306 --name=mysql5.7 -e MYSQL_ROOT_PASSWORD=root mysql:5.7 \
--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
后台运行端口映射主机端口3306容器端口3306,容器名称命名为mysql5.7 ,root账户密码设置为root mysql的版本为5.7,如果本地没有会自动联网下载,字符集为utf-8
cmd本地windows访问命令mysql -uroot -h 192.168.85.11 -P 3306 -p 其中192.168.85.11为远程服务器地址可替换 3306为端口号
部署tomcat
docker run -d --name=tomcat8.5 -p 8080:8080 tomcat:8.5 创建并启动容器
当我们在自己windows程序编好程序文件,可通过远程链接工具比如MobaXterm将文件传到linux中,但是要部署到docker容器中需要命令,命令如下
docker cp ./hello tomcat8.5:/usr/local/tomcat/webapps/ 从宿主机复制文件到容器(docker cp 宿主机路径 容器名称:容器路径)
使用docker部署大体步骤都一致,都与上述步骤类似,比如其他软件部署:
docker run -d --name=redis5.0 -p 6379:6379 redis:5.0 部署redis
docker run -d --name=nginx -p 80:80 nginx 部署nginx 等等
安装docekr compose 工具
curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
设置权限
chmod +x /usr/local/bin/docker-compose
查看版本
docker-compose -version
编写compose配置文件
这样compose中配置的容器软件就能同时启动和开启了(图片上的是nginx和tomcat)
docker -compose up -d 后台启动容器
docker -compose down 停止并删除容器
补充:
停止并删除所有容器
docker stop $(docker ps -q)
docker rm $(docker ps -aq)
数据都是宝贵的,为了防止docker中数据被删除数据不会丢失,一般真实数据都是放在宿主机上(服务器本机)或放在网络中,而是把数据卷挂载在容器中,可以理解为在docker中创建一个数据访问的快捷方式.这样一来各个容器间又能数据共享
mkdir -p /root/tomcat/webapps 在/root目录下创建tomcat目录用于存储tomcat信息,即建立数据卷
docker run -d --name=tomcat1 -p 8081:8080 -v /root/tomcat/webapps:/usr/local/tomcat/webapps tomcat:8.5
docker run -d --name=tomcat2 -p 8082:8080 -v /root/tomcat/webapps:/usr/local/tomcat/webapps tomcat:8.5
将/root/tomcat/webapps中的数据挂载到/usr/local/tomcat/webapps中
创建容器,设置端口映射与目录映射,docker run .........-v 宿主机目录(文件):容器内目录(文件).....
[root@itcast ~]# docker save -o mynginx.tar mynginx:a 将镜像mynginx:a保存成jar包mynginx.tar
[root@itcast ~]# docker load -i mynginx.tar 从tar包将镜像导入到本机
镜像的制作有两种方式:
1.使用容器制作镜像
docker commit 容器id 镜像名称:版本号 版本号为自己定义的版本号
[root@itcast ~]# docker commit nginx mynginx:a
2.使用Dockerfile制作镜像