docker部署与使用
Docker 的基本原理是将应用程序及其依赖项打包成容器,这些容器在独立的、运行在不同操作系统上的虚拟机上运行。每个容器都运行自己的内核,因此可以隔离应用程序及其依赖项,确保它们之间不会相互干扰。容器中运行的应用程序及其依赖项与容器所在的操作系统隔离开来,这样就可以确保在任何环境中运行相同的容器都能够提供相同的应用程序体验。Docker 容器通常由 Docker 引擎提供支持,该引擎是 Docker 平台的核心组件,它提供了管理容器的工具和服务。Docker 容器的打包和部署通常通过 Docker Hub 等云服务来完成,用户可以使用 Docker Hub 存储和共享他们的容器镜像,以便在不同的环境中使用。以下是 Docker 的重要组件构成:
- Docker Engine:Docker 引擎是 Docker 的核心组件,用于在宿主机上管理和运行容器。
- Docker Compose:Docker Compose 是一种工具,用于创建和管理多个容器的应用程序配置文件。
- Docker Swarm:Docker Swarm 是一个集群管理工具,可以管理和扩展多个 Docker 引擎的集群。
- Docker Hub:Docker Hub 是一个公共云存储库,用于存储和共享 Docker 镜像。
- Docker Hub Image Registry:Docker Hub Image Registry 是 Docker Hub 的一部分,用于存储和管理 Docker 镜像。
- Docker Machine:Docker Machine 是一个工具,用于在不同的云平台和本地主机上安装和管理 Docker 引擎。
- Docker Desktop:Docker Desktop 是一个本地安装的 Docker 引擎,用于在本地计算机上管理和运行容器。
以上组件共同构成了 Docker 的核心架构,使得开发人员可以方便地构建、部署和管理容器化应用程序。
CentOS 7上部署Docker
1.安装Docker:在CentOS 7上安装Docker
在CentOS 7上部署Docker的步骤如下:
- 卸载旧版本
在安装新版本Docker之前,请先卸载任何旧版本的Docker,如docker或docker-engine。此外,还应卸载与其相关的依赖项。
执行以下命令:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
Yum可能会报告您未安装这些包。在卸载Docker时,/var/lib/docker/存储的图像、容器、卷和网络不会自动删除。
- 在新主机上首次安装Docker Engine之前,您需要设置Docker仓库。安装完成后,您可以从仓库中安装和升级Docker。
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
安装最新版本的docker
sudo yum install docker-ce docker-ce-cli [containerd.io](http://containerd.io) docker-buildx-plugin docker-compose-plugin
- 启用docker和docker-ce-cli服务
sudo systemctl enable docker.service docker-ce-cli.service #设置为开机自启动
sudo systemctl start docker.service docker-ce-cli.service
- 检查Docker是否已正确安装
sudo docker run hello-world
- 查看Docker服务的状态
sudo docker service ls
- 检查Docker的存储空间
sudo docker info
以上就是在CentOS 7上部署Docker的基本步骤。
2.配置Docker:配置Docker以与CentOS 7系统进行通信,并启用必要的服务和端口。
安装完成后,您需要配置Docker以与CentOS 7系统进行通信。这可以通过在/etc/sysconfig/docker文件中进行配置来完成。以下是一些可能有用的设置:
# 设置Docker所在的位置
export DOCKER_HOME=/usr/local/docker
# 启用远程连接
export DOCKER_OPTS="-H tcp://0.0.0.0:2375"
# 设置默认的HTTP端口
export DOCKER_HOST=tcp://0.0.0.0:2375
# 设置网络模式
export DOCKER_OPTS="-D"
# 允许未知的网络主机连接
export DOCKER_OPTS="-H unix:///var/run/docker.sock"
接下来,您需要启用必要的服务和端口。您可以使用以下命令来启用它们:
systemctl enable docker #设置开机自启动
systemctl start docker
如果您想要开启一些其他的端口,您可以使用以下命令:
systemctl edit docker.service
在文件中添加以下行以开启所需的端口:
Restart=always
Service=docker
User=root
Group=root
Mode=660
Path=/usr/bin/dockerd --graph=/var/lib/docker --privileged --dns=8.8.8.8 --dns=8.8.4.4 --iptables=true --udp-tracker=true
ExecStart=/usr/bin/dockerd --graph=/var/lib/docker --privileged --dns=8.8.8.8 --dns=8.8.4.4 --iptables=true --udp-tracker=true \
--log-opt max-size=10m \
--log-opt max-bytes=1m \
--log-opt timestamp=true \
--insecure-registry 10.10.0.0/8 \
--storage-driver=devicemapper \
--storage-driver=aufs \
--insecure-hosts='*' \
--tls \
--tlscacert=/etc/docker/certs.d/cert.pem \
--tlscert=/etc/docker/certs.d/key.pem \
--tlskey=/etc/docker/certs.d/cert.pem
请注意,您需要根据自己的需要更改此文件。
3.运行Docker容器:创建和运行Docker容器,并在容器中启动应用程序和服务。
创建Dockerfile:
Dockerfile是一个文本文件,它包含了创建Docker镜像所需的指令和步骤。通过编写Dockerfile,您可以指定应用程序和服务所需的环境和依赖项。
Dockerfile是一种文本文件,用于指定如何构建一个Docker镜像。Dockerfile的编写语法相对简单,下面是一个简单的Dockerfile示例:
# 这是Dockerfile的开始
# 设置镜像基础
FROM ubuntu:20.04
# 安装依赖
RUN apt-get update && apt-get install -y \
curl \
&& rm -rf /var/lib/apt/lists/*
# 构建镜像
COPY . /app
WORKDIR /app
RUN docker-compose up
上述Dockerfile包含了以下几个步骤:
1. 指定镜像基础,本例使用了Ubuntu 20.04作为基础镜像;
2. 安装依赖,使用apt-get命令安装curl,并更新APT包列表;
3. 将当前目录下的内容复制到Docker镜像中,使用COPY命令将当前目录下的文件复制到Docker镜像中;
4. 进入Docker镜像中的根目录,使用WORKDIR命令指定当前目录为Docker镜像的根目录;
5. 构建Docker镜像,使用RUN命令执行docker-compose up命令,将应用程序构建到Docker镜像中。
Dockerfile文件的编写非常灵活,可以根据实际需求编写各种复杂的构建过程。
以下是一个构建hello world基础Spring Boot工程的Dockerfile文件的示例:
# 从Spring Boot官方仓库拉取基础镜像
FROM openjdk:11-jdk-alpine
# 将项目源代码放到容器中
COPY . /app
# 将Dockerfile拷贝到项目中
COPY Dockerfile /app/Dockerfile
# 进入容器中的项目目录
RUN cd /app && git clone https://github.com/example/my-spring-boot-app.git
# 配置应用环境变量
RUN sed -i 's/#spring.application.name=hello-world/spring.application.name=my-spring-boot-app/g' /app/application.properties
# 启动应用
CMD ["java", "-jar", "/app/my-spring-boot-app.jar"]
上面的Dockerfile使用了一个开源Java镜像(OpenJDK 11),并将hello world应用程序的源代码放入了一个名为“app”的目录中。在运行Dockerfile之前,需要在Linux上使用docker-compose命令或直接在终端上运行docker build命令构建容器。在构建过程中,可以使用-t选项来为构建的容器指定标签。构建完成后,就可以使用docker run命令来启动容器了。
编译Dockerfile:
在编写完Dockerfile之后,您需要使用Docker Compose或Dockerfile来编译Docker镜像。
这是一个基于Spring Boot的示例项目,使用DockerFile来编译Docker镜像的实际例子。
首先,我们需要在项目中安装必要的依赖和工具。在`pom.xml`文件中添加以下依赖和工具:
<dependencies>
<!-- 其他Spring Boot依赖 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.7.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.7.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>io.springfox</groupId>
<artifactId>springfox-maven-plugin</artifactId>
<version>2.7.2</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
接下来,我们创建一个`Dockerfile`文件来编译Docker镜像。`Dockerfile`文件的位置在项目根目录下,例如`/app`。在`Dockerfile`文件中添加以下内容:
FROM springboot:2.1.4.RELEASE
WORKDIR /app
COPY pom.xml ./
RUN mvn clean install
COPY . .
EXPOSE 8080
CMD ["java", "-jar", "/app/target/spring-boot-app.jar"]
这个`Dockerfile`会创建一个基于Spring Boot 2.1.4.RELEASE镜像的容器,然后运行`mvn clean install`命令来安装项目依赖。然后,将当前目录中的项目复制到容器中,并启动Java应用程序。`Dockerfile`中的`EXPOSE`命令会将容器的端口映射到主机上的8080端口,使得容器可以通过外部网络访问。`CMD`命令会在容器启动时自动运行Java应用程序。
现在,我们可以使用`docker build`命令来构建Docker镜像。在终端中运行以下命令:
docker build -t helloworld .
这个命令会使用`Dockerfile`中定义的`FROM`和`COPY`指令来构建一个新的Docker镜像,并将镜像命名为`helloworld`。`.`指定了Dockerfile文件的位置。
构建完成后,我们可以使用`docker run`命令来启动Docker容器。在终端中运行以下命令:
docker run -p 8080:8080 -d helloworld
这个命令会在后台启动一个新的容器,并将容器的8080端口映射到主机上的8080端口。容器中会运行我们在`Dockerfile`中编译的Java应用程序。现在,我们可以在浏览器中访问`http://localhost:8080`来查看我们的Spring Boot应用程序了。
以下是一个使用Docker Compose来编译Docker镜像的实际例子:
首先,创建一个Docker Compose文件,例如myapp.yml,它包含两个应用程序:app1和app2:
version: '3'
services:
app1:
build: .
command: nginx -g 'daemon off;'
app2:
build: .
command: gunicorn myapp:app
这个文件指示Docker Compose在本地运行的根目录中构建应用程序,并将应用程序设置为一个持续运行的进程。
接下来,运行Docker Compose来构建应用程序镜像:
docker-compose up -d
这将启动一个名为myapp的容器,并将应用程序作为Docker镜像构建。此镜像包含了app1和app2两个应用程序的代码。
要检查应用程序的状态,可以运行以下命令:
docker-compose ps
这将列出所有正在运行的容器和它们的状态。如果应用程序正在运行,您应该看到两个容器,每个容器都有一个应用程序实例。
现在,您可以在其他Docker容器或本地计算机上使用这些应用程序。例如,您可以在一个名为myapp2的容器中运行以下命令来启动应用程序:
docker-compose exec myapp2 nginx -g 'daemon off;'
这将启动一个Nginx服务器容器,并在本地计算机上运行它。然后,您可以使用以下命令在应用程序中部署代码:
docker-compose exec myapp2 gunicorn myapp:app
这将在myapp2容器中启动一个Gunicorn服务器容器,并将代码部署到应用程序中。
这是一个使用Docker Compose来编译Docker镜像的简单示例。Docker Compose提供了一种简单的方法来组织和运行多个应用程序容器,并允许您轻松地部署和管理它们。
dockerhub个人私仓的搭建和使用
搭建阿里云个人免费的dockerhub私仓需要完成以下步骤:
- 创建阿里云账号并登录控制台,选择 “开发者服务” > “容器注册表”。
- 点击 “新建”,选择 “容器注册表私有仓库”。
- 根据提示填写私有仓库信息,包括仓库名称、域名等。
- 选择 “托管容器镜像” 并上传镜像,支持 Dockerfile 和镜像包格式。
- 在 Dockerfile 中配置环境变量和 Docker 加载器。
使用阿里云个人免费的dockerhub私仓需要先获取私有仓库的 URL。具体步骤如下:
- 在阿里云控制台中找到已创建的私有仓库。
- 点击仓库名称,进入仓库详情页。
- 在仓库详情页中找到 “DockerHub仓库链接”,复制该链接。
接下来,就可以使用 Docker 加载器将镜像加载到本地 Docker 环境中。具体步骤如下:
- 在本地使用 Docker 加载器加载私有仓库的镜像。例如,在 Linux 系统中可以使用以下命令:
docker load -i <仓库URL>/<镜像名称>
其中,<仓库URL>
是私有仓库的 URL,<镜像名称>
是需要加载的镜像名称。
2. 在本地创建一个 Docker 容器,使用上述加载的镜像。例如,可以使用以下命令:
docker run -it --name my-container <镜像名称>
其中,-it
表示使用终端模式启动容器,--name
表示给容器起一个名称,<镜像名称>
是上述步骤中加载的镜像名称。
至此,您已经成功地使用阿里云个人免费的 dockerhub私仓了。
Docker常用命令
docker run
:运行一个Docker容器。docker stop
:停止一个正在运行的Docker容器。docker rm
:删除一个已经停止的Docker容器。docker image create
:创建一个新的Docker镜像。docker image build
:使用给定的文件或文件夹构建一个新的Docker镜像。docker image push
:将一个已经构建好的Docker镜像推送到Docker Hub或本地存储库。docker image pull
:从Docker Hub或本地存储库下载一个Docker镜像。docker image list
:列出当前可用的Docker镜像。docker container run
:运行一个Docker容器。docker container stop
:停止一个正在运行的Docker容器。docker container rm
:删除一个已经停止的Docker容器。docker container ls
:列出当前正在运行的Docker容器。docker network create
:创建一个新的Docker网络。docker network connect
:连接一个Docker网络和另一个Docker网络。docker network disconnect
:断开一个Docker网络和另一个Docker网络之间的连接。
以上是Docker常用命令的中文说明,希望能对你有所帮助。