赞
踩
移除旧的版本
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
新建目录里面有 jar 包 和 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"]
demo-boot 镜像名
docker build -t demo-boot .
docker run -d --name xxx容器名称 -p 8080:8080 xxx镜像名称
成功部署
#修改该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
systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl enable docker
systemctl status docker
1,忘记了某些命令的使用可以查看
docker --help
演示:假如我们启动镜像的时候忘记命令的使用
docker run --help
docker images
docker images 镜像名
docker pull 镜像名
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 ps //查看运行的容器
docker ps –a //查看所有的容器(包含运行和退出)
docker container ls
docker container ls–a
启动容器有二种方式,一种是基于镜像新建一个容器并启动,一种是将在终止状态( stopped )的容器重新启动
docker run 参数 镜像名称:tag 执⾏的命令 常⽤参数:
-i 保持和 docker 容器内的交互,启动容器时,运⾏的命令结束后,容器依然存活,没有退出(默认是会退出,即停⽌的)
-t 为容器的标准输⼊虚拟⼀个tty
-d 后台运⾏容器
--rm 容器在启动后,执⾏完成命令或程序后就销毁
--name 给容器起⼀个⾃定义名称
-p 宿主机:内部端口
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)
docker stop id名
docker stop 容器名
container 可省略不写
docker container stop tomcat1//停止正运行容器(ID或Names)
停止所有容器
docker stop $(docker ps -a -q)
docker start id名
docker start 容器名
重启
docker restart 9be696a0c283//启动容器(根据ID或NAMES)
rmi 是删除镜像
docker rm -f xxx容器名
全部删除
docker rm $(docker ps -a -q)
容器在运行的时候 后面就要加 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 logs 容器名称/ID
查看最后十行
默认是十行
docker logs --tail=10 tomcat-8080
查看实时日志
docker logs -f --tail=10 tomcat-8080
参考图片
下面是方式一【老版本 不推荐】
#5 应用数据卷
#5.1 当你映射数据卷时,如果数据卷不存在,Docker会帮你自动创建
docker run -v 数据卷名称:容器内路径 镜像ID
#5.2 直接指定一个路径作为数据卷的存储位置
docker run -v 路径:容器内部的路径 镜像ID
下面是方式二【新版本方式 推荐】
/root/docker-volumn/exam 宿主机的文件
/usr/local/tomcat/webapps/exam 映射到那里的文件
tomcat 容器
docker run -d --name tomcat-8080 -p 8080:8080 -v /root/docker-volumn/exam:/usr/local/tomcat/webapps/exam tomcat
开放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开机启动
遇到了 iptables 失败 就要重启docker
docker pull tomcat
docker run -d --name xxx容器名 -p 8080:8080 tomcat
进入容器后 将前端项目拷贝到 webapps目录里面去
docker exec -it tomcat-8080 bash
有多个 tomcat 配置的话 就改一下容器名
docker cp xxx项目名称1/ tomcat-8080:/usr/local/tomcat/webapps
docker cp xxx项目名称2/ tomcat-8080:/usr/local/tomcat/webapps
然后 再看下面的 配置 nginx 集群
docker pull nginx:1.21.5
如果容器有版本 启动也要加版本
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
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/
docker rm -f xxx容器名
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
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;
}
vi nginx/conf/conf.d/default.conf
vi /root/nginx/conf/nginx/conf.d/default.conf
location /{
proxy_pass http://nginxCluster;
}
密码设置为: root
docker pull mysql:5.7
docker run -d --name mysql5.7-3306 -p 3306:3306 -e MYSQL_ROOT_PASSWORD='root' mysql:5.7
docker exec -it mysql5.7-3306 bash
连接mysql数据库:
mysql -uroot -p
MySQL>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
MySQL>FLUSH PRIVILEGES;
MySQL>EXIT;
WORKDIR
VOLUME
EXPOSE
删除虚悬镜像 【如果有使用它的容器 就要将容器删除 才可以删除虚悬镜像】
docker image prune
(基于tomcat)里面要有一个index.html,并写入Hello dockerfile Docker
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/
demo1 镜像名称
docker build -t demo1 .
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。