本文共 5287 字,大约阅读时间需要 17 分钟。
1.查看centos版本,Docker要求Centos系统的内核版本最低 3.10
# uname -r
2.若Centos的内核最低版本低于 3.10 的话需要执行更新操作,若Centos的最低版本高于 3.10就无需更新
# yum update
3.安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖
# yum install -y yum-utils device-mapper-persistent-data lvm2
4.设置yum源
# yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
5.可以查看所有仓库中所有docker版本,并选择特定版本安装
# yum list docker-ce --showduplicates | sort -r
6.安装docker
# yum install docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版# 若要安装指定版本的docker 例: # yum install docker-ce-17.12.0.ce
7.安装完成docker后,启动docker
# systemctl start docker 启动docker# systemctl enable docker 设置开机启动docker
8.验证docker是否安装成功,若出现版本信息则说明成功安装了
# docker version
1.重启docker服务# systemctl restart docker 2.停止docker命令# systemctl stop docker 3.查看镜像列表# docker images4.删除镜像# docker rmi image-id5.查看容器列表# docker ps# docker ps -a 查看所有容器,包括停止的容器6.启动以及停止容器# docker start container-name/container-id# docker stop container-name/container-id7.删除容器# docker rm container-id# docker rm -f container-id 强制删除容器8.查看容器日志# docker logs container-name/container-id9.设置 阿里云 加速地址找到 /etc/docker/ 目录下# vi daemon.json将以下内容复制到文件中{ "registry-mirrors": ["https://rypl6yvv.mirror.aliyuncs.com"]}# systemctl daemon-reload 通知systemd重载此配置文件# systemctl restart docker 重启docker10.查看最后一次运行的容器docker ps -l 11.查看停止的容器docker ps -f status=exited12.【外部】复制文件到【容器】中去:docker cp /外部目录/外部文件 容器名:/容器目录/文件名【若最后写了文件名,就以最后的文件名为主】 13.【容器】复制文件到【外部】:docker cp 容器名:/容器目录/容器中的文件 /外部目录/文件名【若最后写了文件名,就以最后的文件名为主】14.(目录挂载)文件映射:# docker run -di --name=mynginx -p 90:80 -v /usr/html:/usr/share/nginx/html nginx:1.17.5# -v 目录挂载 外部目录:容器目录 # -p 端口映射 外部端口:容器端口15.查看容器所有信息:docker inspect container-name16.Dockerfile语法说明 命令 作用FROM image_name:tag 定义了使用哪个基础镜像启动构建流程MAINTAINER user_name 声明镜像的创建者ENV key value 设置环境变量(可以写多条)RUN command 是Dockerfile的核心部分(可以写多条)ADD source_dir/file 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压dest_dir/file COPY souce_dir/file 和ADD相似,但是如果有压输文件并不能解压 dest_dir/file WORKDIR path_dir 设置工作目录
1.检索可安装的 mysql 镜像列表
# docker search mysql
查看镜像列表也可在官网查找 https://hub.docker.com/
2.选择合适的镜像后,拉取镜像(拉取镜像前,记住配置阿里云加速镜像地址,否则下载很慢)
# docker pull image-name:tag 例 # docker publl mysql:5.7 # tag 为镜像版本号# image-name 为镜像名
3.拉取下镜像后,查看镜像列表
# docker ps
4.运行容器
# docker run -p 3306:3306 --name mydata -e MYSQL_ROOT_PASSWORD=root -di --restart=always mysql:5.6.46docker run -p 主机端口:容器端口 --name 自定义容器名 -i -t -d -v 主机目录:容器目录:ro 镜像ID或镜像名:TAG#--name 指定容器名,可自定义,不指定自动命名#-i以交互模式运行容器#-t分配一个伪终端,即命令行,通常-it组合来使用#-p指定映射端口,讲主机端口映射到容器内的端口#-d后台运行容器#-V指定挂载主机日录到容器日录,默认为rw读写模式,ro表示只读#-e MYSQL_ROOT_PASSWORD=root 设置MySQL默认密码# --restart=always 表示此容器开机启动,只要docker也设置了开机自启,docker不死
5.查看容器列表
# docker ps
6.在外部用Navicat连接docker中运行的数据库
1.在idea中执行打包操作:
1.将打包好的项目 jar 包上传至服务器中,这里用到了 xftp 工具
这里将jar 上传到了 /usr/local/app/ 的文件夹下
2.在上一步有jar的文件夹下 新建 Dockerfile 文件,名称一定固定为 Dockerfile
# vi Dockerfile #将以下内容填写入 Dockerfile 文件中 #指定基础镜像,本地如果没有会从 dockerhub 上 pull 下来FROM openjdk:8#把可执行jar包复制到基础镜像的根目录下ADD learn.jar /mylearn.jar#容器需要暴露 给主机的端口号,这里的端口号和 项目配置文件中的端口号一致EXPOSE 8090#在镜像运行为容器后执行的命令ENTRYPOINT ["java","-jar","/mylearn.jar"]
说明:
第一步:FROM openjdk:8 为指定基础镜像第二步:第一个 learn.jar 为打包好后的springboot项目jar名称,mylearn.jar 为自定义的名称,将learn.jar复制到 mylearn.jar下面第三步:容器需要暴露 给主机的端口号,这里的端口号和 项目配置文件中的端口号一致第三步: 在镜像运行为容器后执行的命令 此次会被翻译为 java -jar /mylearn.jar
3.执行编译Dockerfile文件命令,构建镜像
# docker build -f Dockerfile -t mylearn:1 .# -f 指定编译的文件# -t 指定镜像名以及版本号# 注意命令最后还有一个 . 表示Dockerfile文件在当前文件下
4.执行命令基于刚才构建的镜像运行容器(即运行springboot项目,运行之前在外部用Navicat连接docker中运行的数据库,新建一个项目中需要连接的数据库)
运行方式一:当springboot项目连接数据的配置文件为:
spring.datasource.url = jdbc:mysql://localhost:3306/spring
#执行运行命令前,若springboot项目需要连接数据库,请确保数据库容器已经在运行# docker run --net=host --name=learn -p 8090:8090 -di mylearn:1#以 --net=host 方式启动的项目 端口号必须一致,因为docker会自动给每个容器分配ip,但是项目里配置的mysql地址是localhost,在容器内连接localhost是连接容器本身而不是宿主机的localhost,所以一直找不到mysql。所以采用host的网络方式将容器与宿主机共用一个Network Namespace,这样容器内localhost就是宿主机的localhost# -p 为端口号映射 8090 为外部访问端口,8090为容器对宿主机的映射端口# -d后台运行容器# -i以交互模式运行容器# --name自定义容器名称# 最后 mylearn 为我们上一步自定义构建的镜像名称
运行方式二:当springboot项目连接数据的配置文件为:
spring.datasource.url = jdbc:mysql://mysql:3306/spring即:有数据库别名的时候
# --link 连接提供mysql服务的容器,冒号后面是配置文件中数据库的别名,别名应该和代码中的数据库地址一致# docker run --link mydata:mysql --name=learn -p 80:8090 -di mylearn:1# --link 链接,mydata为已经在运行的数据库镜像的别名,冒号后面是配置文件中数据库的别名,这里配置文件中数据库的别名为mysql# --name 为容器的别名# -p 为端口号映射 80 为外部访问端口,8090为容器对宿主机的映射端口# -d后台运行容器# -i以交互模式运行容器# 镜像名:版本号
运行方式三:当springboot项目不需要连接数据库的时候
# docker run --name=learn -p 8090:8090 -di mylearn:1
注意:运行成功springboot容器后,不能访问项目的话,可能是端口号没有开启,检查防火墙状态
查看已经开放的端口# firewall-cmd --list-ports 开启端口# firewall-cmd --zone=public --add-port=80/tcp --permanent # 加端口,格式为:端口/通讯协议 # –zone #作用域# –add-port=80/tcp #添加端口,格式为:端口/通讯协议# –permanent #永久生效,没有此参数重启后失效 重启firewall # firewall-cmd --reload 停止firewall # systemctl stop firewalld.service 禁止firewall开机启动 # systemctl disable firewalld.service 开机启动防火墙# systemctl enable firewalld 开启防火墙# systemctl start firewalld
转载地址:http://xqxxi.baihongyu.com/