先记录用到的命令,后续再详解
确保docker已经安装并且运行
docker --version
docker info
编写Dockerfile文件 这个和jar放在一起,然后进入到这个目录下去执行
docker build -t fqgw-java-jar . // -t后面是镜像名称
运行docker容器
docker run --name fqgw-java-jar-container -d fqgw-java-jar
//*****
docker run -d --network host --name fqgw-java-jar-container fqgw-java-jar
--name后面是指定的容器名称 -d是让容器后台运行 然后就是镜像名称
查看容器状态
docker ps
查看jar运行日志 相当于控制台输出
docker logs fqgw-java-jar-container
停止和删除容器
docker stop fqgw-java-jar-container
docker rm fqgw-java-jar-container
清理镜像
docker rmi fqgw-java-jar
1. Docker 的基本概念
-
镜像(Image):Docker 镜像是一个轻量级的、不可变的操作系统文件系统和应用程序文件的组合。镜像是容器的基础,可以从 Docker Hub 或其他镜像仓库拉取,或者根据自己的需求创建。
-
容器(Container):容器是镜像的运行实例,它是一个轻量级的、独立的可执行软件包,包含运行应用程序所需的一切。容器是独立的,相互隔离,但可以共享操作系统内核。
-
Dockerfile:Dockerfile 是一个脚本文件,定义了如何构建一个 Docker 镜像。它包含了一系列指令(如安装软件、复制文件、设置环境变量等)。
-
Docker Hub:Docker Hub 是一个云端的镜像仓库,开发者可以在此发布和共享 Docker 镜像。也可以从 Docker Hub 拉取官方或社区镜像
2. Docker 的安装
-
Ubuntu 安装步骤:
# 更新现有包列表 sudo apt-get update # 安装 Docker 的依赖包 sudo apt-get install apt-transport-https ca-certificates curl software-properties-common 直接去安装ubuntu上的docker -------------------------------------------------弃用--------------------------- # 添加 Docker 官方 GPG 密钥 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # 1. 默认使用国外源,非常非常非常慢! $ sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - # 2. 推荐使用国内源,顺畅! $ sudo curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add - # 添加 Docker 官方的 APT 源 sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" # 1. 默认使用国外源,非常非常非常慢! $ sudo add-apt-repository \ "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable" # 2. 推荐使用国内源,顺畅! $ sudo add-apt-repository \ "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \ $(lsb_release -cs) \ stable" -------------------------------------------------弃用--------------------------- # 再次更新包列表 sudo apt-get update # 安装 Docker sudo apt-get install docker-ce # 验证 Docker 是否安装成功 sudo systemctl status docker
通过
docker --version
检查 Docker 的版本。注意:添加GPG秘钥和APT源本质上就是为了验证是不是安全渠道下载的docker。
3. Docker 的基本操作
3.1 拉取镜像
要运行一个容器,首先需要从 Docker Hub 拉取镜像。以拉取 nginx
镜像为例:
docker pull nginx
3.2 运行容器
拉取镜像后,你可以基于该镜像运行容器。以下命令将启动一个 nginx 容器:
docker run --name mynginx -d -p 8080:80 nginx
--name mynginx
:指定容器的名称。-d
:让容器在后台运行。-p 8080:80
:将主机的 8080 端口映射到容器的 80 端口。
3.3 列出容器
查看所有运行中的容器:
docker ps
查看所有(包括停止的)容器:
docker ps -a
3.4 停止和删除容器
停止容器:
docker stop mynginx
删除容器:
docker rm mynginx
3.5 删除镜像
如果不再需要镜像,可以将其删除:
docker rmi nginx
4. Dockerfile 的使用
如果需要创建一个自定义镜像,可以编写一个 Dockerfile
。例如,假设我们有一个简单的 Java 应用程序(app.jar
),我们可以创建一个 Dockerfile 如下:
# 使用官方 OpenJDK 作为基础镜像
FROM openjdk:8-jre-slim
# 更换 apk 镜像源
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
# 更新软件包列表并安装所需的字体
RUN apk update && apk add --no-cache ttf-dejavu
# 将 JAR 文件复制到镜像中的 /app 目录
COPY app.jar /app/app.jar
# 设置工作目录
WORKDIR /app
# 运行 JAR 文件
CMD ["java", "-jar", "app.jar"]
然后,使用以下命令构建镜像:
docker build -t my-java-app .
构建完成后,使用以下命令运行容器:
docker run --name my-java-container -d my-java-app
--name后面是指定的容器名称 -d是让容器后台运行 然后就是镜像名称
总结
apk
镜像源:用于更换Alpine Linux系统包管理工具apk
的下载源,以加快包的安装速度。daemon.json
镜像加速源:用于更换Docker拉取镜像时的下载源,加快Docker镜像的下载速度。
这两个配置虽然都是关于镜像源的,但它们作用在不同的层面,一个是操作系统包管理的源,另一个是Docker镜像拉取的源。
5. Docker Compose(未研究)
Docker Compose 是 Docker 的一个工具,用于定义和管理多个容器的应用程序。它通过 docker-compose.yml
文件来配置应用程序的服务。
以下是一个简单的 docker-compose.yml
文件示例:
version: '3'
services:
web:
image: nginx
ports:
- "8080:80"
app:
image: my-java-app
ports:
- "8081:8080"
使用 docker-compose up
命令启动所有服务:
docker-compose up -d
6. Docker 网络和数据卷
-
网络:Docker 容器默认处于隔离的网络中,可以通过 Docker 网络模式或 Docker Compose 来配置容器之间的网络通信。
-
数据卷(Volumes):用于在容器和主机之间持久化数据。创建数据卷并将其挂载到容器中,可以确保数据不会因容器的删除而丢失。
创建并使用数据卷:
docker volume create mydata
docker run -d --name myapp -v mydata:/app/data my-java-app
总结
因为docker网络是隔离的,这也就是我一开始命令中运行容器时为什么要加 --network host
使用 --network host
选项会让容器使用主机的网络堆栈。这意味着容器内的应用程序将与主机共享网络环境,使用主机的IP地址和端口。
除了在启动命令上加入 --network host除外,其他办法来设置
7.在Docker中配置和管理网络
1. 默认的 Bridge 模式
当运行一个容器时,Docker默认会将其连接到一个名为 bridge
的虚拟网络中。
运行容器时使用默认的桥接网络:
docker run -d --name my_container my_image
在这种模式下,容器有自己独立的网络命名空间,你可以通过 docker inspect my_container
查看容器的IP地址。
2. Host 模式(正在使用)
使用 --network host
参数运行容器,这将使容器共享主机的网络环境。容器内的服务将直接绑定到主机的网络接口。
运行容器时使用主机网络:
docker run -d --network host --name my_container my_image
在这种模式下,主机和容器共享同一个网络命名空间,容器的服务可以通过主机的IP地址直接访问。
3. None 模式
如果希望完全隔离容器的网络,可以使用 --network none
,这样容器将没有网络接口。
运行容器时使用无网络模式:
docker run -d --network none --name my_container my_image
4. 自定义 Bridge 网络
你可以创建一个自定义的桥接网络,允许多个容器加入同一个网络,并通过容器名称来相互通信。
创建自定义桥接网络:
docker network create my_bridge_network
在自定义网络中运行容器:
docker run -d --network my_bridge_network --name my_container_1 my_image docker run -d --network my_bridge_network --name my_container_2 my_image
在这个网络中,my_container_1
可以通过 my_container_2:port
直接访问 my_container_2
。
5. Overlay 网络
Overlay网络通常用于跨多个主机的分布式应用程序,例如在Docker Swarm或Kubernetes中。
在Docker Swarm中创建Overlay网络:
docker network create --driver overlay my_overlay_network
在Overlay网络中运行容器:
docker service create --name my_service --network my_overlay_network my_image
6. Docker Compose 配置网络
通过Docker Compose,可以在 docker-compose.yml
文件中定义多个服务,并指定它们的网络。
示例 docker-compose.yml
文件:
version: '3'
services:
web:
image: nginx
networks:
- my_network
app:
image: my_app_image
networks:
- my_network
networks:
my_network:
driver: bridge
启动Compose应用:
docker-compose up -d
在这个例子中,web
和 app
服务将连接到 my_network
网络中,并可以通过服务名称相互通信。
7. 配置Docker Daemon使用国内镜像源
为了加速从Docker Hub下载镜像,可以配置 daemon.json
文件,指定国内的镜像源,例如阿里云。
编辑或创建 /etc/docker/daemon.json
:
--------------------------9.4弃用------------------------
{
"registry-mirrors": ["https://yxzrazem.mirror.aliyuncs.com"]
}
--------------------------------------------------------
{
"registry-mirrors": [
"https://do.nark.eu.org",
"https://dc.j8.work",
"https://docker.m.daocloud.io",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
]
}
重启Docker服务:
sudo systemctl restart docker
这样配置后,Docker会优先从配置的镜像源下载镜像,大大加快下载速度。
------------------------------------------总结到这里2024.8.30---------------------------------------------------