1.安装Docker
/**
* 1.安装yum-util、device-mapper-persistent-data、lvm2
* 2.yum-util提供yum-config-manager功能; device-mapper-persistent-data、lvm2是device mapper驱动依赖
* 3.设置yum源
*/
# yum install -y yum-utils device-mapper-persistent-data lvm2
# yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo
/**
* 1.查看可用版本
* 2.选择版本安装
* 3.启动docker, 自启动
*/
# yum list docker-ce --showduplicates | sort -r
> docker-ce.x86_64 3:20.10.9-3.el7 docker-ce-stable
> docker-ce.x86_64 3:20.10.8-3.el7 docker-ce-stable
> docker-ce.x86_64 3:20.10.7-3.el7 docker-ce-stable
# yum install docker-ce-20.10.9-3.el7 -y
# systemctl start docker
# systemctl enable docker
# ps -ef | grep docker
> root 1724 1 4 09:29 ? 00:00:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
2.通过插件(idea),实现自动部署
2.1.开启docker的远程访问
/**
* 1.开启docker的远程访问, 编辑/usr/lib/systemd/system/docker.service
* 2.将 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
* 替换为 ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
* 3.重新加载配置文件
* 4.重启docker
* 5.查看进程, 进程中带有 tcp://0.0.0.0:2375 -H unix://var/run/docker.sock 则表示成功
*/
# vi /usr/lib/systemd/system/docker.service
# systemctl daemon-reload
# systemctl restart docker
# ps -ef | grep docker
> root 1910 1 0 01:33 ? 00:00:00 /usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock
2.2.配置Dockerfile文件
# 基础镜像, 使用centos操作系统
FROM centos:7
# 发布者
MAINTAINER zhanghf <f5psyche@163.com>
# 在docker容器构建时创建文件夹
RUN mkdir /usr/local/java
# 将宿主机的文件拷贝到容器中的具体目录
# ADD, 拷贝后自动解压; COPY, 只做拷贝
# 宿主机上的文件路径是Dockerfile的相对路径
# 如果按目前的配置, 则需要在Dockerfile文件所在路径下拥有jdk-8u301-linux-x64.tar.gz压缩包
ADD jdk-8u301-linux-x64.tar.gz /usr/local/java
# 在容器中创建/usr/local/java/jdk1.8.0_301与/usr/local/java/jdk的软连接
RUN ln -s /usr/local/java/jdk1.8.0_301 /usr/local/java/jdk
# 配置jdk环境
ENV JAVA_HOME /usr/local/java/jdk
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH ${JAVA_HOME}/bin:$PATH
# 系统编码
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
#声明一个挂载点, 容器内此路径会对应宿主机的某个文件夹
VOLUME /tmp
#应用构建成功后的jar文件被复制到镜像内, 名字也改成了dockerdemo.jar
ADD target/dockerdemo-1.0-SNAPSHOT.jar dockerdemo.jar
#启动容器时的进程
ENTRYPOINT ["java","-jar","/dockerdemo.jar"]
#暴露8080端口
EXPOSE 8080
2.3.新建docker远程连接
2.4.新建运行配置(edit configuration)
2.5.执行运行配置,服务器上查看进程(第一次执行会比较慢)
/**
* 查看进程, 看到如下内容, 表示部署成功了
*/
# ps -ef | grep docker
> root 2359 1910 0 01:54 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 18080 -container-ip 172.17.0.2 -container-port 8080
> root 2364 1910 0 01:54 ? 00:00:00 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 18080 -container-ip 172.17.0.2 -container-port 8080
> root 2397 2378 22 01:54 pts/0 00:00:16 java -jar /dockerdemo.jar
3.docker私有仓库搭建,上传/下载/删除镜像
/**
* 1.拉取仓库镜像
* 2.创建私有仓库容器, https://www.runoob.com/docker/docker-run-command.html
* -d: 后台运行容器, 并返回容器ID
* -p: 指定端口映射, 格式为: 主机(宿主)端口:容器端口
* -e: 设置环境变量(REGISTRY_STORAGE_DELETE_ENABLED=true, 允许删除镜像)
* --name: 为容器指定一个名称
* 3.使用curl命令访问私有仓库地址
* 4.配置私有仓库可视化, 注意: --link 的内容是私有仓库的容器名称; 34.80.201.81 替换成自己服务器的ip
* 5.通过浏览器访问 34.80.201.81:28080 可以私有仓库里的镜像信息
*/
# docker pull registry
# docker run -d -v /edc/images/registry:/var/lib/registry -p 5000:5000 --restart=always --name xdp-registry -e REGISTRY_STORAGE_DELETE_ENABLED=true registry
# curl 127.0.0.1:5000/v2/_catalog
> {"repositories":[]}
# docker pull hyper/docker-registry-web
# docker run -d -p 28080:8080 --name registry-web --link xdp-registry -e REGISTRY_URL=http://34.80.201.81:5000/v2 hyper/docker-registry-web
/**
* 将镜像上传到私有仓库
* 1.因为docker registry交互默认使用的是https, 但是私有仓库是http, 所以我们需要在上传端进行启动配置
* 编辑 /etc/docker/daemon.json , 添加 {"insecure-registries": ["34.80.201.81:5000"]}, 重启docker
* 1.通过docker images 查看镜像名称
* 2.标记本地镜像, 将其归入某一仓库, docker tag 镜像名称 34.80.201.81:5000/name[:TAG] 默认latest
* 3.将本地镜像上传到镜像仓库
*
*/
# vi /etc/docker/daemon.json
# systemctl restart docker
# docker images
> REPOSITORY TAG IMAGE ID CREATED SIZE
> dockerdemo latest ea025b655710 19 minutes ago 630MB
> centos 7 eeb6ee3f44bd 4 weeks ago 204MB
# docker tag dockerdemo 34.80.201.81:5000/zhanghf/dockerdemo
# docker push 34.80.201.81:5000/zhanghf/dockerdemo
/**
* 1.从私有仓库拉取镜像
* 2.创建容器并启动服务(当服务需要在不同环境下连接不同数据的时候, 可以通过环境变量和yml的方式进行处理)
* 有需要浏览 https://blog.csdn.net/weixin_45456679/article/details/120864778
* 3.连接容器
*/
# docker pull 34.80.201.81:5000/zhanghf/dockerdemo
# docker images
> REPOSITORY TAG IMAGE ID CREATED SIZE
> 34.80.201.81:5000/zhanghf/dockerdemo latest ea025b655710 52 minutes ago 630MB
# docker run -d -p 18080:8080 --name dockerdemo 34.80.201.81:5000/zhanghf/dockerdemo
# docker exec -it b8c74bbfc2c9 /bin/bash
/**
* 查看私有仓库的镜像内容
* 1.查看私有仓库镜像名
* 2.查看具体镜像有哪些版本
* 3.查看具体镜像某个版本的信息
*/
# curl 34.80.201.81:5000/v2/_catalog
> {"repositories":["zhanghf/dockerdemo"]}
# curl http://34.80.201.81:5000/v2/zhanghf/dockerdemo/tags/list
> {"name":"zhanghf/dockerdemo","tags":["latest"]}
# curl http://34.80.201.81:5000/v2/zhanghf/dockerdemo/manifests/latest
/**
* 删除私库的镜像
* 1.查看镜像 Docker-Content-Digest
* curl --header "Accept:application/vnd.docker.distribution.manifest.v2+json" -I -XGET <仓库地址>/v2/<镜像名>/manifests/<tag>
* 2.删除镜像
* curl -I -X DELETE "<仓库地址>/v2/<镜像名>/manifests/<镜像Docker-Content-Digest>"
* 3.如果删除的时候报错, 是因为registry不允许删除镜像。
* {"errors":[{"code":"UNSUPPORTED","message":"The operation is unsupported."}]}
* 只需要启动registry的时候增加环境变量 REGISTRY_STORAGE_DELETE_ENABLED=true
*/
# curl --header "Accept:application/vnd.docker.distribution.manifest.v2+json" -I -XGET 34.80.201.81:5000/v2/zhanghf/dockerdemo/manifests/1.0
> HTTP/1.1 200 OK
> Content-Length: 1368
> Content-Type: application/vnd.docker.distribution.manifest.v2+json
> Docker-Content-Digest: sha256:f51929e67efbacea4bebf0b11cd56af6f00a1d8c00d4606dbd3b3c09b5c454bf
> Docker-Distribution-Api-Version: registry/2.0
> Etag: "sha256:f51929e67efbacea4bebf0b11cd56af6f00a1d8c00d4606dbd3b3c09b5c454bf"
> X-Content-Type-Options: nosniff
> Date: Wed, 20 Oct 2021 03:35:45 GMT
# curl -I -X DELETE "34.80.201.81:5000/v2/zhanghf/dockerdemo/manifests/sha256:f51929e67efbacea4bebf0b11cd56af6f00a1d8c00d4606dbd3b3c09b5c454bf"