Docker 安装
移除旧的版本
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
安装一些必要的系统工具:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
源2:(阿里云源)
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新 yum 缓存
sudo yum makecache fast
安装 Docker-CE
sudo yum -y install docker-ce
启动 Docker 后台服务
sudo systemctl start docker
重启 Docker服务
sudo systemctl restart docker
安装成功后可通过查看
docker version
springboot部署Docker
1、先准备好 jar包
新建目录里面有 jar 包 和 Dockerfile 文件
2、编写 Dockerfile
FROM java:8
VOLUME /tmp
ADD demo-0.0.1-SNAPSHOT.jar demo-boot.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/demo-boot.jar"]
3、构建镜像
demo-boot 镜像名
docker build -t demo-boot .
4、运行容器
docker run -d --name xxx容器名称 -p 8080:8080 xxx镜像名称
成功部署
Idea集成docker实现镜像打包一键部署
#修改该Docker服务文件(支持远程访问)
开启 2375 端口
vi /lib/systemd/system/docker.service
上段代码会配置后启动失败,可以尝试下面这种方式
https://blog.51cto.com/u_15075514/4152814
<build>
<plugins>
<!--配置打包为jar包-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!--配置idea使用docker-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<!--指定 Dockerfile 路径-->
<!--<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>-->
<configuration>
<!-- 镜像名称 java-localhost/demo-boot-->
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<!--指定标签-->
<imageTags>
<imageTag>${project.version}</imageTag>
</imageTags>
<!-- 基础镜像jdk 1.8-->
<baseImage>java</baseImage>
<!-- 制作者提供本人信息 -->
<!--<maintainer>guoweixin guoweixin@aliyun.com</maintainer>-->
<!--切换到/ROOT目录 -->
<workdir>/ROOT</workdir>
<cmd>["java", "-version"]</cmd>
<entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
<!--指定远程 docker api地址-->
<dockerHost>http://192.168.126.129:2375</dockerHost>
<!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
<resources>
<resource>
<targetPath>/ROOT</targetPath>
<!--用于指定需要复制的根目录,${project.build.directory}表示target目录-->
<directory>${project.build.directory}</directory>
<!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar
包文件。-->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
在pom添加相关配置后,在终端运行创建容器代码
mvn clean package docker:build
也可以配置好 直接使用meven点击package就同时创建docker容器
也就是多了 configuration 下面几行代码
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<!--指定 Dockerfile 路径-->
<!--<dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory>-->
<configuration>
<!-- 镜像名称 java-localhost/demo-boot-->
<imageName>${docker.image.prefix}/${project.artifactId}</imageName>
<!--指定标签-->
<imageTags>
<imageTag>${project.version}</imageTag>
</imageTags>
<!-- 基础镜像jdk 1.8-->
<baseImage>java</baseImage>
<!-- 制作者提供本人信息 -->
<!--<maintainer>guoweixin guoweixin@aliyun.com</maintainer>-->
<!--切换到/ROOT目录 -->
<workdir>/ROOT</workdir>
<cmd>["java", "-version"]</cmd>
<entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
<!--指定远程 docker api地址-->
<dockerHost>http://192.168.126.129:2375</dockerHost>
<!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
<resources>
<resource>
<targetPath>/ROOT</targetPath>
<!--用于指定需要复制的根目录,${project.build.directory}表示target目录-->
<directory>${project.build.directory}</directory>
<!--用于指定需要复制的文件。${project.build.finalName}.jar指的是打包后的jar
包文件。-->
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
<!--当执行mvn package 时,执行: mvn clean package docker:build -->
<executions>
<execution>
<id>build-image</id>
<phase>package</phase>
<goals>
<goal>build</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
====================================================
查看防火墙状态
firewall-cmd --list-ports
删除文件夹:
rm -r
删除非空文件夹:
rm -r -f xxx
1===> docker的基本使用
一、docker的基础命令
1 ,启动docker
systemctl start docker
2 ,关闭docker
systemctl stop docker
3 ,重启docker
systemctl restart docker
4 ,设置docker开机自启动
systemctl enable docker
5 , 查看docker运行状态(显示绿色代表正常启动)
systemctl status docker
二、docker的帮助命令
1,忘记了某些命令的使用可以查看
docker --help
演示:假如我们启动镜像的时候忘记命令的使用
docker run --help
三、docker镜像命令
1 ,查看docker镜像列表
docker images
2 ,单独搜索镜像
docker images 镜像名
3,拉取镜像
docker pull 镜像名
4,删除没有用的镜像
docker image rmi 镜像ID //常用
#删除一个
docker rmi -f 镜像名/镜像ID
#删除多个 其镜像ID或镜像用用空格隔开即可
docker rmi -f 镜像名/镜像ID 镜像名/镜像ID 镜像名/镜像ID
#删除全部镜像 -a 意思为显示全部, -q 意思为只显示ID
docker rmi -f $(docker images -aq)
强制删除
docker image rm 镜像名称/镜像ID
Docker其它辅助命令
查看本地镜像的 IMAGE ID
docker images -q
查看⼀个镜像的制作历程
docker history 镜像名称
四、docker容器命令 //重点
1、 查看容器状态
docker ps //查看运行的容器
docker ps –a //查看所有的容器(包含运行和退出)
docker container ls
docker container ls–a
2、 Docker 启动容器
启动容器有二种方式,一种是基于镜像新建一个容器并启动,一种是将在终止状态( stopped )的容器重新启动
docker run 参数 镜像名称:tag 执⾏的命令 常⽤参数:
-i 保持和 docker 容器内的交互,启动容器时,运⾏的命令结束后,容器依然存活,没有退出(默认是会退出,即停⽌的)
-t 为容器的标准输⼊虚拟⼀个tty
-d 后台运⾏容器
--rm 容器在启动后,执⾏完成命令或程序后就销毁
--name 给容器起⼀个⾃定义名称
-p 宿主机:内部端口
运行一个tomcat镜像容器【新启动】
docker run -d --name tomcat-8080 -p 8080:8080 tomcat
例如:我们启动一个mysql5.7版本的
docker run -it -d --name mysql mysql:5.7 /bin/bash
停止后删除容器
docker run --name tomcat-8080 -d -p 8080:8080 --rm tomcat
Docker 守护态运行
更多的时候,需要让 Docker 在后台运行而不是直接把执行命令的结果输出在当前宿主机下。此时,可以通过添
加 -d 参数来实现
如果不使用 -d 参数运行容器:将会在当前宿主机运行。
如果使用了 -d 参数运行容器。此时容器会在后台运行并不会把输出的结果 (STDOUT) 打印到宿主机上面(输出结果可以用 docker logs查看)。
查看控制台结果: docker logs tomcat //(ID或Names)
3、 停止容器
docker stop id名
docker stop 容器名
container 可省略不写
docker container stop tomcat1//停止正运行容器(ID或Names)
停止所有容器
docker stop $(docker ps -a -q)
4、 启动容器
docker start id名
docker start 容器名
重启
docker restart 9be696a0c283//启动容器(根据ID或NAMES)
5、 删除容器
rmi 是删除镜像
docker rm -f xxx容器名
全部删除
docker rm $(docker ps -a -q)
6、 Docker 进入容器
使用 docker exec 命令进入容器
容器在运行的时候 后面就要加 bash
docker exec -it xxx容器名 bash
一开始Tomcat容器里面打开是404 是因为里面没有内容(docker为了小体积 都删除了)
要在里面添加内容 才会有显示
退出容器
exit
案例一、tomcat docker的概念:不可使用镜像,通过镜像创建无数容器
1、下载tomcat的镜像
> docker pull tomcat docker images #显示所有镜像
2、创建tomcat容器
> docker run -d --name tomcat-8080 -p 8080:8080 tomcat docker run -d
> --name tomcat-8081 -p 8081:8080 tomcat
3、进入容器配置服务
> docker exec -it tomcat-8080 bash
五、在宿主机和容器之间交换文件
进入容器
docker exec -it tomcat-8080 bash
1、首先将文件放到 root 宿主机(如果源文件就在root这里 次步骤可省略)
docker cp tomcat-8080:/usr/local/tomcat/webapps/ROOT/index.html /root
2、将 index.html 复制回去给容器
docker cp index.html tomcat-8080:/usr/local/tomcat/webapps/ROOT
部署
docker cp xxxx tomcat-8080:/usr/local/tomcat/webapps
六、Docker 查看日志
docker logs 容器名称/ID
查看最后十行
默认是十行
docker logs --tail=10 tomcat-8080
查看实时日志
docker logs -f --tail=10 tomcat-8080
参考图片
七、Docker 数据卷【在宿主机修改后 映射的文件会立马生效】
1、数据卷应用 【可以直接去配 nginx】
下面是方式一【老版本 不推荐】
#5 应用数据卷
#5.1 当你映射数据卷时,如果数据卷不存在,Docker会帮你自动创建
docker run -v 数据卷名称:容器内路径 镜像ID
#5.2 直接指定一个路径作为数据卷的存储位置
docker run -v 路径:容器内部的路径 镜像ID
下面是方式二【新版本方式 推荐】
/root/docker-volumn/exam 宿主机的文件
/usr/local/tomcat/webapps/exam 映射到那里的文件
tomcat 容器
!!!运行一个容器 并且将 exam文件 映射到 /usr/local/tomcat/webapps/exam里面去 是tomcat 容器【省去了一个cp的过程】
docker run -d --name tomcat-8080 -p 8080:8080 -v /root/docker-volumn/exam:/usr/local/tomcat/webapps/exam tomcat
Centos防火墙端口
开放8080端口(如下命令只针对Centos7以上)
查看已经开放的端口:
firewall-cmd --list-ports
开启端口:
firewall-cmd --zone=public --add-port=8080/tcp --permanent
关闭端口:
firewall-cmd --permanent --zone=public --remove-port=8080/tcp
开启防火墙:
systemctl start firewalld
重启防火墙:
firewall-cmd --reload #重启
firewall systemctl stop firewalld.service #停止
firewall systemctl disable firewalld.service #禁止firewall开机启动
2===> Docker安装开发环境
遇到了 iptables 失败 就要重启docker
一、安装 Tomcat
1、取最新版的 Tomcat镜像
docker pull tomcat
2、运行容器
docker run -d --name xxx容器名 -p 8080:8080 tomcat
3、进入容器
进入容器后 将前端项目拷贝到 webapps目录里面去
docker exec -it tomcat-8080 bash
3、将项目拷贝到webapps目录
有多个 tomcat 配置的话 就改一下容器名
docker cp xxx项目名称1/ tomcat-8080:/usr/local/tomcat/webapps
docker cp xxx项目名称2/ tomcat-8080:/usr/local/tomcat/webapps
然后 再看下面的 配置 nginx 集群
二、安装Nginx
1、取最新版的 Nginx 镜像
docker pull nginx:1.21.5
2、运行容器
如果容器有版本 启动也要加版本
docker run -d -p80:80 --name xxx容器名 nginx
docker run -d -p80:80 --name nginx nginx:1.21.5
【查看默认安装位置 whereis nginx】
进入容器
docker exec -it xxx容器名 bash
3、copy配置文件
docker container cp xxx容器名:/etc/nginx /root/nginx/conf/
docker container cp nginx:/var/log/nginx /root/nginx/logs/
docker container cp nginx:/usr/share/nginx/html /root/nginx/html/
4、删除nginx容器
docker rm -f xxx容器名
5、做映射
docker run --name nginx -d -p80:80 \
-v /root/nginx/conf:/etc/nginx \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/log:/var/log/nginx nginx:1.21.5
配置 nginx 集群
1、进入 nginx.conf 里面配置 nginx.conf 文件
vi nginx/conf/nginx.conf
或者
vi /root/nginx/conf/nginx/nginx.conf
upstream nginxCluster {
server 192.168.126.129:8080;
server 192.168.126.129:8081;
server 192.168.126.129:8082;
}
2、在 default.conf 配置 location 映射
vi nginx/conf/conf.d/default.conf
vi /root/nginx/conf/nginx/conf.d/default.conf
location /{
proxy_pass http://nginxCluster;
}
三、安装Mysql
密码设置为: root
1、拉取镜像
docker pull mysql:5.7
2、启动容器 并设置 密码
docker run -d --name mysql5.7-3306 -p 3306:3306 -e MYSQL_ROOT_PASSWORD='root' mysql:5.7
3、访问测试,进入容器
docker exec -it mysql5.7-3306 bash
连接mysql数据库:
mysql -uroot -p
4、授权其他机器登陆 1、授权主机访问:
MySQL>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
5、刷新权限:
MySQL>FLUSH PRIVILEGES;
6、退出:
MySQL>EXIT;
3===> Dockerfile 定制镜像
WORKDIR
VOLUME
EXPOSE
一、创建一个镜像
删除虚悬镜像 【如果有使用它的容器 就要将容器删除 才可以删除虚悬镜像】
docker image prune
(基于tomcat)里面要有一个index.html,并写入Hello dockerfile Docker
1、在宿主机创建一空白目录
2、在该目录下,创建一文件Dockerfile
vim Dockerfile
输入命令
FROM tomcat
RUN mkdir -p /usr/local/tomcat/webapps/ROOT/
RUN echo 'Hello dockerfile Docker'>/usr/local/tomcat/webapps/ROOT/index.html
WORKDIR /usr/local/tomcat/webapps/
3、构建镜像
demo1 镜像名称
docker build -t demo1 .
4、运行镜像所在容器
docker run -d --name demo-8081 -p 8081:8080 demo1
这样就访问 tomcat 就有 index.html 页面内容了
========================================================
案例 Demo3
创建镜像 demo3 里面有图片 1.jpg
将 桌面的图片放到当前目录
FROM tomcat
WORKDIR /usr/local/tomcat/webapps/
RUN mkdir ROOT
COPY 1.jpg /usr/local/tomcat/webapps/ROOT/
构建镜像
docker build -t demo3 .
运行容器
docker run -d -p 8080:8080 --name demo3-8080 demo3