文章目录
docker入门实战,简单粗暴
!!!持续更新,有需要补充的知识点可留言
一、docker概念
!!!简单瞅一眼,略懂一二就可以
- 容器化(Containerization): 容器化是一种虚拟化技术,通过将应用程序、环境和依赖项打包到一个称为容器的封闭单元中,实现了应用程序在不同环境中一致运行的能力。容器化提供了隔离性、可移植性和可部署性,使应用程序能够在任何支持Docker的系统中运行。
- 容器(Container): 容器是一个独立、轻量级的执行单元,包含了应用程序、其依赖项和运行时环境。每个容器都在一个隔离的环境中运行,与其他容器相互隔离,从而防止相互干扰。容器与虚拟机相比更轻量级,具有更快的启动时间和较小的资源开销。
- 镜像(Image): 镜像是一个只读的文件,包含了应用程序的文件系统、代码和依赖项。镜像是容器的基础,通过它可以创建多个相同的容器实例。镜像是不可修改的,容器通过在镜像的基础上添加一个可写层来运行。
- Dockerfile: Dockerfile是用于构建Docker镜像的文本文件,其中包含了一系列指令,指示Docker如何构建镜像。Dockerfile可以定义基础镜像、环境变量、文件拷贝、运行命令等,使得镜像的构建过程可重复且可自动化。
- Docker镜像仓库(Registry): Docker镜像仓库是用于存储、共享和管理Docker镜像的中心化服务。Docker Hub是一个常用的公共镜像仓库,也可以搭建私有镜像仓库来管理自己的镜像。
- 容器编排(Orchestration): 容器编排是指管理和编排多个容器的过程,以实现高可用性、可伸缩性和负载均衡。工具如Docker Swarm和Kubernetes可以帮助自动化容器的部署、扩展和管理。
- Docker Compose: Docker Compose是一个工具,允许通过一个单独的文件定义和管理多容器的应用环境。通过编写Compose文件,可以定义各个服务、网络、卷等,并使用一条命令启动整个应用程序。
- Docker网络: Docker网络允许容器之间进行通信,以及与主机或外部网络进行通信。Docker提供了多种网络模式,如桥接网络、主机网络和覆盖网络,用于满足不同的网络需求。
- Docker卷(Volumes): Docker卷是用于在容器和主机之间持久存储数据的机制。使用卷可以使数据在容器销毁后仍然保留,从而实现数据持久性和容器状态的分离。
- Docker Registry: Docker Registry是用于存储Docker镜像的服务。除了公共的Docker Hub之外,还可以部署自己的私有Registry来管理自定义的镜像。
二、docker基础命令(可满足日常docker使用)
镜像相关命令:
docker images
:列出本地所有的镜像列表,显示镜像名称、标签、ID、创建时间等信息。docker pull image_name:tag
:从Docker Hub或其他镜像仓库拉取指定名称和标签的镜像到本地。tag:标签、版本号,例如,docker pull ubuntu:latest
将拉取最新版的Ubuntu镜像。docker build -t image_name:tag path_to_dockerfile
:根据指定的Dockerfile构建一个新的镜像,并设置名称和标签。路径参数是指向包含Dockerfile的目录。docker push image_name:tag
:将本地的镜像推送到Docker Hub或其他镜像仓库,使得其他人可以访问和使用这个镜像。
容器相关命令:
-
docker run image_name:tag
:基于指定的镜像运行一个新的容器。如果镜像不存在本地,Docker会尝试从镜像仓库拉取。 -
docker ps
:列出正在运行的容器列表,包括容器ID、名称、镜像、创建时间、状态等信息。 -
docker ps -a
:列出所有容器的列表,包括已停止的容器。此命令也会显示容器的退出代码和时间。 -
docker start container_id/name
:启动已停止的容器,container_id:容器ID,name:容器名称。 -
docker stop container_id/name
:停止正在运行的容器。 -
docker restart container_id/name
:重启容器,相当于先停止再启动。 -
docker rm container_id/name
:删除指定的容器。必须在容器停止状态下才能删除。 -
docker exec -it container_id/name command
:在容器内部执行指定的命令,-it
标志用于启动一个交互式的终端,command:需要执行的命令。 -
docker logs container_id/name
:查看容器的日志输出,包括标准输出和标准错误输出。 -
docker cp
(文件从容器复制到本地主机,以及将文件从本地主机复制到容器)从容器复制文件到本地:
docker cp container_id:/opt/container_file /opt/host
将
container_id
替换为实际容器的ID,/opt/container_file
为容器内文件的路径,/opt/host
为您希望在本地主机上保存文件的路径。示例:
docker cp my-container:/app/myfile.txt /home/user/myfile.txt
这将从名为
my-container
的容器复制/app/myfile.txt
文件到本地主机的/home/user/myfile.txt
。从本地复制文件到容器:
docker cp /opt/host container_id:/opt/container_directory
将
/opt/host
替换为本地主机上文件的路径,container_id
为目标容器的ID,/opt/container_directory
为容器内的目标目录。示例:
docker cp /home/user/myfile.txt my-container:/app/
这将把本地主机上的
/home/user/myfile.txt
文件复制到名为my-container
的容器的/app/
目录。
网络相关命令:
docker network ls
:列出所有网络,包括网络ID、名称、驱动程序等信息。docker network create network_name
:创建一个新的用户自定义网络,可以在容器之间进行通信。docker network connect network_name container_name
:将容器连接到指定的网络,使它们能够进行通信。
数据卷相关命令:
docker volume ls
:列出所有数据卷,显示卷名称、驱动程序、挂载点等信息。docker volume create volume_name
:创建一个新的数据卷,供容器使用。docker volume inspect volume_name
:查看数据卷的详细信息,包括底层存储路径等。
其他命令:
docker info
:显示Docker系统的信息,如版本、操作系统、可用的容器和镜像数量等。docker version
:显示Docker客户端和服务端的版本信息。
三、docker入门实战(可满足日常docker使用)
docker安装直通车:https://blog.csdn.net/LSW1737554365/article/details/132274027
docker部署nginx、mysql、redis、java应用程序
关闭防火墙(有效避免端口未开放等问题):
systemctl stop firewalld
(一)部署Nignx
1、拉去镜像
docker pull nginx
2、运行nginx容器
docker run -d -p 80:80 --name nginx_test nginx:latest
-d
:容器在后台运行。-p 80:80
:将主机的端口80映射到容器的端口80。--name nginx_test
:指定容器的名称为"my-nginx"。
3、将nginx配置文件映射到容器中(方便后续部署修改配置文件)
创建映射目录
mkdir -p /opt/nginx/
复制容器中的nginx配置文件到宿主机(服务器本地)
docker cp nginx_test:/etc/nginx/conf.d /opt/nginx/
docker cp nginx_test:/etc/nginx/nginx.conf /opt/nginx/
docker cp nginx_test:/usr/share/nginx/html /opt/nginx/
停止并删除容器
docker stop nginx_test
docker rm nginx_test
运行nginx容器并将宿主机配置文件映射到容器中
docker run -d -p 80:80 --name nginx_test \
-v /opt/nginx/conf.d:/etc/nginx/conf.d \
-v /opt/nginx/nginx.conf:/etc/nginx/nginx.conf \
-v /opt/nginx/html:/usr/share/nginx/html nginx:latest
4、访问测试
浏览器访问:http://localhost/
(二)部署mysql
1、拉去镜像
docker pull mysql
2、运行mysql容器并将数据文件映射到宿主机(服务器本地)
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=password -v /opt/mysql_data:/var/lib/mysql mysql:latest
将以下内容替换为实际的值:
-d
:容器在后台运行。-p 3306:3306
:将主机的端口3306映射到容器的端口3306。--name my-mysql
:指定容器的名称为"my-mysql"。-e MYSQL_ROOT_PASSWORD=password
:设置MySQL的root用户密码,将"password"替换为你自己的密码。-v /opt/mysql_data:/var/lib/mysql
:将本地目录/opt/mysql_data
挂载到容器的MySQL数据目录。
3、连接测试
使用mysql数据库连接工具进行连接测试
(三)部署redis
1、拉去镜像
docker pull redis
2、运行mysql容器并将数据文件映射到宿主机(服务器本地)
docker run -d -p 6379:6379 --name redis -v /opt/redis_data:/data -e REDIS_PASSWORD=password redis:latest
将以下内容替换为实际的值:
-d
:容器在后台运行。-p 6379:6379
:将主机的端口6379映射到容器的端口6379。--name redis
:指定容器的名称为"redis"。-v /opt/redis_data:/data
:将本地目录/opt/redis_data
挂载到容器的/data
目录。-e REDIS_PASSWORD=password
:设置环境变量以指定Redis密码。
3、连接测试
使用redis客户端工具进行连接测试
(四)部署java应用程序
!!以jdk1.8为例
应用程序包名称:project.jar
方案一(自己制作jdk1.8镜像)
1、下载基础官方centos7镜像
docker pull centos:7
2、下载JDK 1.8源码包
官方网站:https://www.oracle.com/java/technologies/javase-jdk8-downloads.html
3、创建Dockerfile,添加以下内容
# 使用官方的CentOS 7镜像作为基础镜像
FROM centos:7
# 设置作者信息
LABEL maintainer="your_email@example.com"
# 将JDK源码包复制到镜像中
COPY jdk-8u281-linux-x64.tar.gz /tmp/
# 解压JDK源码包并安装
RUN cd /tmp && tar -zxvf jdk-8u281-linux-x64.tar.gz && \
mv jdk1.8.0_281 /usr/local/ && \
rm -f jdk-8u281-linux-x64.tar.gz
# 设置Java环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_281
ENV PATH $PATH:$JAVA_HOME/bin
# 在容器内创建一个目录,用于存放Java程序
RUN mkdir /app
# 设置工作目录
WORKDIR /app
# 定义容器启动命令
CMD ["java", "-version"]
4、构建镜像
将 Dockerfile
和JDK源码包放到相同目录下,打开终端,并运行以下命令来构建Docker镜像:
docker build -t centos_jdk1.8 .
5、基于源码包的CentOS JDK 1.8镜像中运行Java程序
docker run -itd --rm --name java_app -p 8080:8080 -v /opt/project.jar:/app/project.jar centos_jdk1.8 java -jar /app/project.jar
解释:
docker run
: 运行一个新的容器。-itd
: 分别代表 “interactive”(交互式)、“tty”(终端) 和 “detached”(后台运行)。这使容器在后台运行,但允许您随时连接到容器的终端。--rm
: 当容器停止时,自动删除容器。这可以确保容器不会残留在系统中。--name java_app
: 指定容器的名称为 “java_app”。-p 8080:8080
: 将主机的端口8080映射到容器的端口8080。这样,您可以通过主机的8080端口访问容器内运行的程序。-v /opt/project.jar:/app/project.jar
: 将主机上的/opt/project.jar
目录中的内容挂载到容器的/app/project.jar
目录中。这使得主机上的Java JAR文件可以在容器内访问。centos-jdk8-source
: 使用名为 “centos-jdk8-source” 的Docker镜像。java -jar /app/project.jar
: 在容器内以Java JAR程序的方式运行/app/project.jar
。
6、查看实时运行日志
docker logs -f java_app
方案二(使用别人制作好的jdk1.8镜像)
1、拉去jdk1.8镜像
docker pull 987846/jdk1.8
2、运行Java应用程序
docker run -itd --rm --name java_app -p 8080:8080 -v /opt/project.jar:/app.jar -e APP=/app.jar 987846/jdk1.8
3、查看实时运行日志
docker logs -f java_app