Docker install
# 移除旧版本的Docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#最快的删除
sudo yum remove docker*
#安装 yum-utils
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装指定的docker版本
# 找到所有可用版本
yum list docker-ce --showduplicates | sort -r
# 指定版本安装
sudo yum install docker-ce-3:23.0.6-1.el7 docker-ce-cli-3:23.0.6-1.el7 containerd.io docker-buildx-plugin docker-compose-plugin
# 安装最新默认版本【我们用这个】
sudo yum install --enablerepo=docker-ce-stable docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动docker
sudo systemctl start docker
# 开机启动
systemctl enable docker
set linux network
cd /etc/sysconfig/network-script
BOOTPORTO=dhcp
ONBOOT=NO
#改为
BOOTPORTO=static
ONBOOT=yes
#添加
IPADDR=***.***.***.***
GATEWAY=***.***.***.***
DNS1=114.114.114.114
DNS2=8.8.8.8
#配置完重启网络
service network restart
base operation
#拉镜像
docker pull 镜像名
#镜像操作
docker iamges
docker iamges -a
docker images -aq
docker image ls
#删镜像
docker iamge rm 镜像id/镜像名:tag
#打包镜像
docker image save -o nginx.tar nginx:1.19.10
#加载镜像
docker image load -i nginx.tar
#查看容器
docker ps
docker ps -a
#启动容器
docker run 镜像名:tag
-d 后台运行
--name 命名
--restart 机子重启后是否一并重启,它的前提是docker的开机自启
-p 绑定要暴露的端口,从外往里写
-e 环境变量,要参考hub.docker.com网来写
#删除停止的容器
docker rm
#强制删除容器
docker rm -f
每个容器都是一个linux
#进入容器中
docker exec -it 容器名/id bash
#交互模式
-it
#用bash模式交互
bash
#容器日志
docker logs 容器名id/name
#挂载
#为了不进容器就可以修改配置的技术
#有两种,都是以-v来配置
#一:外部如果是路径,就是挂载。以外部为准
#二:外部如果不是路径,就是映射。以内部为准
#金标准:配置文件都用映射。其他无所谓,哪个方便用哪个
#绝对路径挂载
docker run -d \
--anme nginx001 \
-p 8888:80 \
-v /opt/ngxhtml:/usr/share/nginx/html \
-v /opt/ngxconf:/etc/nginx \
nginx:1.19.10
#相对路径映射
docker run -d \
--name ngx004 \
-p 9999:80 \
-v ngxhtml:/usr/share/nginx/html \
-v ngxconf:/etc/nginx \
nginx:1.19.10
#挂载的路径是自己指定的,
#映射的路径是docker指定的
#用docker volume inspect 容器名 查询
#一般在 /var/lib/docker/volumes/你的卷名/_data
Docker network
#为使容器间互相访问不绕远路(直接访问,不走linux的ip),并更好维护(用容器名访问)
#配置自定义的网络
#查看网络
docker network ls
#创建网络,默认创建的是桥接模式
docker network create 网卡名
#查看网卡详情,在这个中就可以想看该网卡中的容器所占IP
docker network inspect 网卡名
#同理,在创建容器时可以直接指定容器所归属的网卡
docker run --network 网卡名
Dockerfile
#制作自己的镜像 docker build
#将自己写的程序打包,制作成自己的镜像
#编写Dockerfile文本
#多的参考官方文档
FROM openjdk:21-ea-17-slim
# 标签;随便写一些标签 LABEL <key>=<value> <key>=<value> <key>=<value> ...
LABEL author=about create='2023/12/12'
# 指定端口:EXPOSE <port> [<port>/<protocol>...]
EXPOSE 8080
# 指定环境变量 ENV <key>=<value> ...
# 环境变量在后面动态取出用, -e hello=xxx: 改变原来环境变量的值
ENV hello=world
# ADD 给镜像中添加东西。如果是 网络连接会自动下载来
#COPY [--chown=<user>:<group>] [--chmod=<perms>] <src>... <dest>
#把target目录的jar包复制到 镜像linux系统中的 /opt目录下并叫 app.jar文件
COPY target/*.jar /opt/app.jar
# 即使 docker run -v 不说这个目录挂载,都会自动挂载
#VOLUME ["/data"]
# 只要进入到容器中,容器默认在 /opt 目录下工作。
WORKDIR /opt
# 入口; 别人 docker run 你,你 run 谁
ENTRYPOINT ["java", "-jar", "/opt/app.jar"]
# CMD 可以写很多次
#CMD ["java", "-jar", "/opt/app.jar"]
#CMD ["java", "-jar", "/opt/app.jar"]
#CMD ["java", "-jar", "/opt/app.jar"]
#CMD ["java", "-jar", "/opt/app.jar"]
slim
FROM openjdk:21-ea-17-slim
LABEL author=about1134 create='2023.09.14'
EXPOSE 8888
COPY *.jar /opt/app.jar
WORKDIR /opt
ENTRYPOINT ["java","-jar","/opt/app.jar"]
#制作镜像
docker build -f Dockerfile -t 自定义镜像名 .
Docker compose
#当一个项目需要多个组件(镜像)来提供支持,没有新技术就只能一个一个的去run开启。
#docker compose就是可以一次开启多个镜像的技术
#需要编写对应要求的yaml文件。
#参考官方文档
services:
javaapp:
image: javaapp:v1.1
ports:
- "8899:8080"
restart: always
redis01:
image: redis:lastest
ports:
- "6379:6379"
volumes:
- redis-data:/data
- redis-conf:/etc/redis
restart: always
volumes:
redis-data: {}
redis-conf: {}
services:
app:
image: app
ports:
- "8888:8888"
networks:
- jrTest
redis003:
image: redis
ports:
- "6379:6379"
networks:
- jrTest
networks:
jrTest:
最佳用法:
1、官方提供 compose.yaml 文件
2、其他人拿到文件。
- `docker compose -f compose.yaml up -d`: 后台启动所有应用
- `docker compose -f compose.yaml down`: 停止删除所有容器
- `docker compose -f compose.yaml stop:` 停止所有容器
- `docker compose -f compose.yaml start:` 启动所有容器