原因:环境不一致导致环境配置相当麻烦,费时费力! —平滑移植
达到应用程序跨平台见得无缝接轨运作。
举例:
一次镜像,处处运行!
将应用打成镜像,将其运行在docker容器上面。
1.确定版本是否合规
2.卸载旧版本
3.yum安装gcc相关
yum -y install gcc
yum -y install gcc-c++
4.安装需要的软件包
官网要求:
命令:yum install -y yum-utils
5.设置stable镜像仓库
如果按照官网 由于外网会出现超时等问题、基本用不了:
优选阿里云仓库:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
6.更新yum软件包索引(重建yum索引,提高yum下载速度)
yum makecache fast
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
systemctl start docker
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://lwn97uve.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
先在本地找如果有直接运行,没有远程hub拉取,拉取到之后再运行;
底层原理:docker为什么会比vm快?
docker search xxx
docker pull xxx:版本号
eg:docker pull redis:6.0.8
docker system df
docker rmi hello-world
强制删除 docker rmi -f hello-world
例如:
这种镜像建议删除,一般没什么用,可能是误下载或者其他来源,不用!
新建+启动容器
docker run
docker run -it --name=myu1 -it ubuntu /bin/bash
说明:-it 表示进入ubuntu后可以进行交互,继续去操作运行的ubuntu(进行命令操作)
docker ps [OPTIONS]
守护式交互:
docker run -d ubuntu
docker logs ID
总结:工作开发中一般使用exec的,这样就不会出现exit退出后导致容器的停止!
$ docker login --username=hei0078 registry.cn-hangzhou.aliyuncs.com
$ docker login --username=hei0078 registry.cn-hangzhou.aliyuncs.com
$ docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/xiaolin2580/myubuntu:[镜像版本号]
$ docker push registry.cn-hangzhou.aliyuncs.com/xiaolin2580/myubuntu:[镜像版本号]
成功后验证进行拉取:
$ docker pull registry.cn-hangzhou.aliyuncs.com/xiaolin2580/myubuntu:[镜像版本号]
坑:容器卷记得加入
--privileged=true
做数据卷案例时如果没有写的话默认为 (可读可写)rw
容器内部(只限制容器,不限制主机)只读权限:
容器内部限制的目录下只能读,不能写,创建东西
继承语句:
说明:父类关系 u2继承u1 host为宿主主机 u2---->u1---->host
问题:当u1挂掉的时候,host添加数据,u2还能同步更新吗?
回答:会同步更新到,因为u2继承的是u1挂载的路径的规则,它们之间是相互独立的,所以不相干;u1启动后,host和u2之间同步的数据还是会同步到的!
删除webapps,因为它是个空文件
rm webapps
将真正有文件的目录修改为webapps
mv webapps.dist webapps
解决方案二: 不用最新版的tomcat (使用tomcat8)
mysql安装运行 运行命令可直接在官网进行粘贴
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
简单版删除容器后数据也就丢失了,那么如何备份让我们不去删容器跑路,请看下面实战版!!!!!!!!!!!!
docker run -d -p 3306:3306 --privileged=true
-v /zzyyuse/mysql/log:/var/log/mysql --日志
-v /zzyyuse/mysql/data:/var/lib/mysql --数据
-v /zzyyuse/mysql/conf:/etc/mysql/conf.d --配置
-e MYSQL_ROOT_PASSWORD=123456
--name mysql mysql:5.7
新建my.cnf 通过容器卷同步给mysql容器实例解决中文乱码
插入mycof文件的内容:
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
回到简单安装时的问题:将容器删除后,mysql数据丢失了怎么办?
回答:按照实战启动mysql容器后,数据卷也相应配置挂在在宿主机上面,产生对应的备份数据,当容器删除后,我们将容器按照之前启动的方式启动,也是数据卷挂在相应的目录,那么容器启动后数据就会直接备份回来,开启即有数据!!!!!
docker run -p 6379:6379 --name myr3 --privileged=true
-v /app/redis/redis.conf:/etc/redis/redis.conf
-v /app/redis/data:/data
-d redis:6.0.8 redis-server /etc/redis/redis.conf
启动容器后进入容器连接redis
eg:
docker exec -it myr3 /bin/bash
redis-cli
注意:在宿主机修改配置文件后一定要重启容器,让容器加载到宿主机的配置,这样就ok了!!!!
nginx的安装见高级篇详细讲解: