docker入门,简单粗暴

docker入门实战,简单粗暴

!!!持续更新,有需要补充的知识点可留言

一、docker概念

!!!简单瞅一眼,略懂一二就可以

  1. 容器化(Containerization): 容器化是一种虚拟化技术,通过将应用程序、环境和依赖项打包到一个称为容器的封闭单元中,实现了应用程序在不同环境中一致运行的能力。容器化提供了隔离性、可移植性和可部署性,使应用程序能够在任何支持Docker的系统中运行。
  2. 容器(Container): 容器是一个独立、轻量级的执行单元,包含了应用程序、其依赖项和运行时环境。每个容器都在一个隔离的环境中运行,与其他容器相互隔离,从而防止相互干扰。容器与虚拟机相比更轻量级,具有更快的启动时间和较小的资源开销。
  3. 镜像(Image): 镜像是一个只读的文件,包含了应用程序的文件系统、代码和依赖项。镜像是容器的基础,通过它可以创建多个相同的容器实例。镜像是不可修改的,容器通过在镜像的基础上添加一个可写层来运行。
  4. Dockerfile: Dockerfile是用于构建Docker镜像的文本文件,其中包含了一系列指令,指示Docker如何构建镜像。Dockerfile可以定义基础镜像、环境变量、文件拷贝、运行命令等,使得镜像的构建过程可重复且可自动化。
  5. Docker镜像仓库(Registry): Docker镜像仓库是用于存储、共享和管理Docker镜像的中心化服务。Docker Hub是一个常用的公共镜像仓库,也可以搭建私有镜像仓库来管理自己的镜像。
  6. 容器编排(Orchestration): 容器编排是指管理和编排多个容器的过程,以实现高可用性、可伸缩性和负载均衡。工具如Docker Swarm和Kubernetes可以帮助自动化容器的部署、扩展和管理。
  7. Docker Compose: Docker Compose是一个工具,允许通过一个单独的文件定义和管理多容器的应用环境。通过编写Compose文件,可以定义各个服务、网络、卷等,并使用一条命令启动整个应用程序。
  8. Docker网络: Docker网络允许容器之间进行通信,以及与主机或外部网络进行通信。Docker提供了多种网络模式,如桥接网络、主机网络和覆盖网络,用于满足不同的网络需求。
  9. Docker卷(Volumes): Docker卷是用于在容器和主机之间持久存储数据的机制。使用卷可以使数据在容器销毁后仍然保留,从而实现数据持久性和容器状态的分离。
  10. Docker Registry: Docker Registry是用于存储Docker镜像的服务。除了公共的Docker Hub之外,还可以部署自己的私有Registry来管理自定义的镜像。

二、docker基础命令(可满足日常docker使用)

镜像相关命令:

  1. docker images:列出本地所有的镜像列表,显示镜像名称、标签、ID、创建时间等信息。
  2. docker pull image_name:tag:从Docker Hub或其他镜像仓库拉取指定名称和标签的镜像到本地。tag:标签、版本号,例如,docker pull ubuntu:latest 将拉取最新版的Ubuntu镜像。
  3. docker build -t image_name:tag path_to_dockerfile:根据指定的Dockerfile构建一个新的镜像,并设置名称和标签。路径参数是指向包含Dockerfile的目录。
  4. docker push image_name:tag:将本地的镜像推送到Docker Hub或其他镜像仓库,使得其他人可以访问和使用这个镜像。

容器相关命令:

  1. docker run image_name:tag:基于指定的镜像运行一个新的容器。如果镜像不存在本地,Docker会尝试从镜像仓库拉取。

  2. docker ps:列出正在运行的容器列表,包括容器ID、名称、镜像、创建时间、状态等信息。

  3. docker ps -a:列出所有容器的列表,包括已停止的容器。此命令也会显示容器的退出代码和时间。

  4. docker start container_id/name:启动已停止的容器,container_id:容器ID,name:容器名称。

  5. docker stop container_id/name:停止正在运行的容器。

  6. docker restart container_id/name:重启容器,相当于先停止再启动。

  7. docker rm container_id/name:删除指定的容器。必须在容器停止状态下才能删除。

  8. docker exec -it container_id/name command:在容器内部执行指定的命令, -it 标志用于启动一个交互式的终端,command:需要执行的命令。

  9. docker logs container_id/name:查看容器的日志输出,包括标准输出和标准错误输出。

  10. 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/目录。

网络相关命令:

  1. docker network ls:列出所有网络,包括网络ID、名称、驱动程序等信息。
  2. docker network create network_name:创建一个新的用户自定义网络,可以在容器之间进行通信。
  3. docker network connect network_name container_name:将容器连接到指定的网络,使它们能够进行通信。

数据卷相关命令:

  1. docker volume ls:列出所有数据卷,显示卷名称、驱动程序、挂载点等信息。
  2. docker volume create volume_name:创建一个新的数据卷,供容器使用。
  3. docker volume inspect volume_name:查看数据卷的详细信息,包括底层存储路径等。

其他命令:

  1. docker info:显示Docker系统的信息,如版本、操作系统、可用的容器和镜像数量等。
  2. 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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值