部署单体项目:
1.先把项目打包成war包并上传到服务器
2.创建Dockerfile文件
cd /usr/local/docker
mkdir tomcat
cd /usr/local/docker/tomcat
mkdir wang
cd /usr/local/docker/tomcat/wang
cd 到项目war包所在位置
mv 项目war名字 /usr/local/docker/tomcat/wang/test.war
cd /usr/local/docker/tomcat/wang
vi Dockerfile
3.编辑Dockerfile文件
FROM tomcat # 此项目基于tomcat
MAINTAINET wang # 编辑者
ADD test.war /usr/local/tomcat/webapps/test.war # 在当前目录找test.war 添加到/usr/local/tomcat/webapps/下,并命名为test.war
4.构建镜像
docker build -t wang/tomcat .
5.启动容器
docker run --name tomcat -p 8080:8080 wang/tomcat
6.打开浏览器访问测试
ip:8080/test
数据卷简介:
数据卷是一个可以供一个或多个容器使用的特殊目录。
可以达到以下目的:
1. 绕过“拷贝写”系统,以达到本地磁盘IO的性能,(比如运行一个容器,在容器中对数据卷修改内容,会直接改变宿主机上的数据卷中的内容,所以是本地磁盘IO的性能,而不是先在容器中写一份,最后还要将容器中的修改的内容拷贝出来进行同步。)
2. 绕过“拷贝写”系统,有些文件不需要在docker commit打包进镜像文件。
3. 在多个容器间共享目录
4. 在宿主和容器间共享目录
5. 在宿主和容器间共享一个文件。
创建数据卷:
方法一:dockerfile中指定VOLUME后的目录,如 VOLUME /var/lib/test
方法二:docker run命令中加-v选项。如 :
docker run -d -P -v /webapp training/webapp python app.py
注意:这里定义的 /webapp 数据卷,但是不知道宿主机上与之对应的在哪里。我们需要仔细的观察docker inspect docker ps -q的结果,是非常长的一段东西。在这里我只摘出我们需要的部分
例子:
创建目录 mkdir -p /usr/local/docker/tomcat/share/webapps/ROOT
cd /usr/local/docker/tomcat/share/webapps/ROOT
vi index.html hello share tomcat
cd /usr/local/docker/tomcat/share/webapps/
进入到该目录运行tomcat
docker run --name tomcat -d -p 8080:8080 -v $PWD:/usr/local/tomcat/webapps/ tomcat
$PWD 意思是基于当前目录
$PWD:/usr/local/tomcat/webapps/ 把容器的目录映射到/usr/local/docker/tomcat/share/webapps/下
访问 ip:8080 即可看到效果 "hello share tomcat"
在启动一个tomcat
docker run --name tomcat2 -d -p 8081:8080 -v $PWD:/usr/local/tomcat/webapps/ tomcat
再次访问 ip:8081 可看到两次访问结果一样
这样就可以直接操作宿主机器的文件而不需要操作容器文件了,且达到了文件共享的目的
并且不管是删除容器还是停止容器,/usr/local/docker/tomcat/share/webapps/ROOT/index.html
文件都不会被删除,保证了数据的持久化
备份数据卷:
启动mysql测试
docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql/conf.d \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql
因为启动的时候是用的
-v /usr/local/docker/mysql/conf:/etc/mysql/conf.d \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \ 即数据卷的形式,所以宿主机和容器共享了数据所以/usr/local/docker/mysql 这个目录就是mysql数据库的数据,备份数据卷只需要把这个目录下的东西给打包就可
如:
tar -zxvf backup_2018106.tar.gz .
即可做到备份的作用
还原数据卷:
重新克隆一台服务器,并把之前备份的数据放到一台安全的机器上,进入到新的服务器
创建mysql文件夹 mkdir -p /usr/local/docker/mysql
下拉mysql镜像 docker pull mysql
并把之前的数据压缩包移动到 /usr/local/docker/mysql目录下
如:
mv /home/backup_2018106.tar.gz /usr/local/docker/mysql/backup_2018106.tar.gz
然后解压缩 tar -zxvf backup_2018106.tar.gz
删除备份 rm -rf backup_2018106.tar.gz
重新启动mysql
docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql/conf.d \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql
启动完毕,可以用远程工具连接测试
下载安装docker-compose
简介:
允许用户通过一个单独docker-comose.yml模版文件来定义一组相关联的应用容器为一个项目compose重要概念:服务:一个应用容器,实际可包括若干运行相同镜像的容器实例。项目:由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义一个项目可以由多个服务(容器)关联而成,compose面向项目进行管理运行compose项目:docker-compose up
意思就是可以通过 docker-compose来启动docker镜像并减少每次启动所需要输入的大量参数
可以直接下载:
sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
也可以进入https://github.com/docker/compose/releases/ 下载 选择是Latest release的不要用Pre-release
选择自己的操作系统进行选择,我这里用的是 docker-compose-Linux-x86_64 版本是1.22.0
把文件上传到服务器,如果用xftp上传没有权限可以创建一个目录并分配权限
chmod 777 文件名 即可上传成功
上传完毕后 mv docker-compose-Linux-86_64 docker-compose
并把此文件放到环境变量下,通过 cat /etc/environment 查看
root@ubuntu:/home/downloads# cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
root@ubuntu:/home/downloads# mv docker-compose /usr/bin
查看是否移动成功
root@ubuntu:/home/downloads# ls /usr/bin |grep docker-compose
docker-compose
此时的docker-compose没有可执行的权限所以我们需要修改他的用户组包括权限
root@ubuntu:/usr/bin# chown -R root:root docker-compose
root@ubuntu:/usr/bin# chmod +x docker-compose
查看所属用户组合权限
root@ubuntu:/usr/bin# ll |grep docker-compose
-rwxrwxr-x 1 root root 11750136 Oct 6 11:28 docker-compose*
输入查看版本测试是否成功
root@ubuntu:/usr/bin# docker-compose version
docker-compose version 1.22.0, build f46880fe
docker-py version: 3.4.1
CPython version: 3.6.6
OpenSSL version: OpenSSL 1.1.0f 25 May 2017
测试第一个docker-compose文件
cd /usr/local/docker/tomcat
rm -rf /usr/local/docker/tomcat/
vi docker-compose.yml
创建一个docker-compose.yml配置文件(每一级用两个空格,不能直接用tab键)
version: '3' # 对应版本
services: # 设置服务
tomcat: # 服务名字可以任意起
restart: always # 总是开机自启
image: tomcat # 使用的镜像
container_name: tomcat # 容器名称
ports: # 端口
- 8080:8080
启动 docker-compose up 这种启动是占用主线程的启动。停止使用ctrl+c停止
并使用 docker-compose down删除使用过的镜像记录
打开浏览器访问测试 ip:8080
docker compose常用命令:
前台运行 : docker-compose up
后台运行 : docker-compose up -d
启动 : docker-compose start
停止 : docker-compose stop
停止并移除容器列表 : docker-compose down
tomcat的使用:
创建一个docker-compose.yml配置文件
version: '3' # 对应版本
services: # 设置服务
tomcat: # 服务名字可以任意起
restart: always # 总是开机自启
image: tomcat # 使用的镜像
container_name: tomcat # 容器名称
ports: # 端口
- 8080:8080
volumes: # 数据卷
- /usr/local/docker/tomcat/webapps/:/usr/local/tomcat/webapps/
environment: # 环境变量
TZ: Asia/Shanghai
mkdir -p /usr/local/docker/tomcat/webapps/ROOT
vi /usr/local/docker/tomcat/webapps/ROOT/index.html hello docker compose
启动测试 docker-compose up -d 打开浏览器访问: ip:8080查看效果
测试mysql:
version: '3'
services:
mysql:
restart: always
image: mysql
container_name: mysql
ports:
- 3306:3306
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123123
command: # 命令配置编码
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1 # 忽略数据库表大小写
--max_allowed_packet=128M
--sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
volumes:
- mysql-date:/var/lib/mysql
volumes:
mysql-date: