几种场景下的docker创建及实战

目录

1 Docker定义说明

2 Docker 安装

3 Docker基本指令

4 Docker 创建示例【联网情况】

4.1 示例:C++ 程序

4.2 示例:Python 脚本

4.3 示例:HTML

5 Docker 创建C++示例【无网情况】

5.1 示例:Ubuntu环境

5.2 示例:虚拟机环境

6 Docker Hub 上传与下载

6.1 Docker Hub上传

6.2Docker Hub下载运行

7 总结

1 Docker定义说明
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
(1)DockerClient客户端
(2)Docker Daemon守护进程
(3)Docker Image镜像
(4)DockerContainer容器

Docker 的核心概念
镜像(Image):镜像是一个只读模板,包含了运行应用程序所需的所有内容【类似一个软件包,包含操作系统、应用程序代码、运行时、库和依赖项】。镜像可以从 Docker Hub 或其他镜像仓库中获取,也可以自己创建。
例子:如果你有 Python 应用程序,则可以创建一个包含 Python 解释器和应用程序代码的镜像。

容器(Container):容器是镜像的一个可运行实例,包含了运行应用程序的所有必要环境。容器是独立的、可移植的,并且可以在任何支持 Docker 的系统上运行【可认为是一个轻量级的、独立的虚拟机】。
例子:使用前面创建的 Python 镜像,你可以启动一个容器来运行你的应用程序。这个容器就像一个轻量级的虚拟机,里面有你的应用程序及其依赖项。

Dockerfile:Dockerfile 是一个脚本文件,包含了一系列指令,用于定义如何创建 Docker 镜像。每条指令在 Docker 镜像中创建一个新的层(Layer)。

例子:一个简单的 Dockerfile 可能包含以下内容:

# 使用 Python 3.8 作为基础镜像
FROM python:3.8-slim
 
#设置工作目录
WORKDIR /app
 
#复制当前目录下的所有文件到工作目录
COPY . .
 
#安装依赖包
RUN pip install flask
 
#暴露容器内的 5000 端口
EXPOSE 5000
 
#运行应用程序
CMD ["python", "app.py"]

#使用 Python 3.8 作为基础镜像
FROM python:3.8-slim
 
#设置工作目录
WORKDIR /app
 
#复制当前目录下的所有文件到工作目录
COPY . .
 
#安装依赖包
RUN pip install flask
 
#暴露容器内的 5000 端口
EXPOSE 5000
 
#运行应用程序
CMD ["python", "app.py"]

Docker Hub:Docker Hub 是一个公共的镜像仓库,允许用户存储和分享 Docker 镜像。用户可以从 Docker Hub 下载已有的镜像,或者上传自己的镜像。
例子:你可以从 Docker Hub 拉取官方的 Python 镜像,使用命令:

docker pull python:3.8-slim
  1. Docker 安装
    传送门:【服务器】安装Docker环境_在服务器上安装docker

  2. Docker基本指令

#1.列出正在运行的容器,包括停止的容器:
docker ps -a
#如果查找名为 shuym-centos-container 的容器,可以执行以下命令:
docker ps -a | grep shuym-centos-container
 
#2.使用 docker stop 命令停止容器。容器 ID 是container_id
docker stop container_id

#容器 name 是 container_name
docker stop container_name
 
#3.删除指定容器。
#(1)假设容器 ID 是 container_id,执行以下命令删除容器:
docker rm container_id

#(2)假设容器 name 是 container_name
docker rm container_name
 
#4.列出所有本地镜像:
docker images
 
#5.删除 Docker 镜像:假设镜像 ID 是 image_id,执行以下命令删除镜像:
docker rmi image_id
 
#6.关闭 Docker 容器:停止容器而不删除它
docker stop container_id
 
#7.启动指定容器:
docker start container_id

4 Docker 创建示例【联网情况】
4.1 示例:C++ 程序

  1. 创建C++程序
vim hello.cpp

内容如下:

#include <iostream>
int main()
{
    std::cout << "Hello from Docker and C++!" << std::endl;
    return 0;
}
  1. 创建 Dockerfile
    用于描述如何构建我们的 Docker 镜像。
vim Dockerfile

内容如下:

#使用基础镜像
FROM gcc:latest

#将本地文件复制到容器中的指定路径
COPY hello.cpp /usr/src/hello.cpp
 
#设置工作目录
WORKDIR /usr/src
 
#编译 C++ 程序
RUN g++ -o hello hello.cpp
 
#运行可执行文件
CMD ["./hello"]

这个 Dockerfile 使用了 GCC 官方镜像作为基础,然后将我们的 hello.cpp 文件复制到容器的 /usr/src 目录,并在容器中编译它。最后通过 CMD 指令运行了编译后的可执行文件。

  1. 构建 Docker 镜像。
    在项目文件夹中执行以下命令:
docker build -t my-cpp-app .

这将根据 Dockerfile 中的描述构建一个名为 my-cpp-app 的 Docker 镜像。

  1. 运行 Docker 容器。
    执行以下命令:
docker run my-cpp-app

这将运行 Docker 容器,并在控制台上打印 “Hello from Docker and C++!”。

测试完记得清理该docker容器与模板。

4.2 示例:Python 脚本
创建一个简单的 Python 脚本。

  1. 创建一个名为 app.py 的文件:
vim app.py

内容如下:

#app.py
print("Hello from Docker!")
  1. 创建一个 Dockerfile

用于描述如何构建我们的 Docker 镜像。在项目文件夹中创建一个名为 Dockerfile 的文件:

vi Dockerfile

内容如下:

#使用基础镜像
FROM python:3.9-slim
#将本地文件复制到容器中的指定路径
COPY app.py /app/app.py
#设置工作目录
WORKDIR /app
#运行 Python 应用程序
CMD ["python", "app.py"]

该 Dockerfile 使用了 Python 官方镜像作为基础,然后将我们的 app.py 文件复制到容器的 /app 目录,并设置了工作目录为 /app,最后通过 CMD 指令运行了 Python 应用程序。

  1. 构建 Docker 镜像。
    在项目文件夹中执行以下命令:
docker build -t my-python-app .

这将根据 Dockerfile 中的描述构建一个名为 my-python-app 的 Docker 镜像。

  1. 运行 Docker 容器。
    执行以下命令:
docker run my-python-app

这将运行 Docker 容器,并在控制台上打印 “Hello from Docker!”。

测试完记得清理该docker容器与模板。

4.3 示例:HTML
创建一个简单的 HTML 文件,作为 Web 服务器要提供的内容。

  1. 创建 index.html 的文件:
vim index.html

内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>My Docker Website</title>
</head>
<body>
    <h1>Hello from Docker!</h1>
    <p>This is a simple Docker example.</p>
</body>
</html>
  1. 创建 Dockerfile文件
    该文件描述了如何构建 Docker 镜像:
vim Dockerfile

内容如下:

#使用基础镜像
FROM nginx:latest

#将本地文件复制到容器中的指定路径
COPY index.html /usr/share/nginx/html

 #暴露容器的端口
EXPOSE 80

#使用基础镜像
FROM nginx:latest
 
#将本地文件复制到容器中的指定路径
COPY index.html /usr/share/nginx/html
 
#暴露容器的端口
EXPOSE 80

该 Dockerfile 使用了 Nginx 的官方镜像作为基础,然后将我们的 index.html 文件复制到 Nginx 的默认网站目录,并暴露了容器的 80 端口。

  1. 构建 Docker 镜像。
    在项目文件夹中执行以下命令:
docker build -t my-docker-example .

这将根据 Dockerfile 中的描述构建一个名为 my-docker-example 的 Docker 镜像。

  1. 运行 Docker 容器。

执行以下命令:

docker run -d -p 8080:80 my-docker-example

这将在后台运行我们的 Docker 容器,并将主机的 8080 端口映射到容器的 80 端口。

现在,可以打开浏览器访问 http://localhost:8080,将看到一个简单的网页,显示 “Hello from Docker!”。

如果不支持浏览器可以输入命令:

curl http://localhost:8080

可以看到对应内容。测试完记得清理该docker容器与模板。
5. Docker 创建C++示例【无网情况】
在没有网络的情况下,可以通过在联网环境中提前下载好所需的 Docker 镜像,并将其传输到无网络的环境中进行部署。

5.1 示例:Ubuntu环境
步骤 1:在有网络环境中准备

  1. 下载 GCC Docker 镜像
docker pull gcc:latest
  1. 保存 Docker 镜像到文件:将下载的 Docker 镜像保存为一个 tar 文件
docker save -o gcc_latest.tar gcc:latest

将 gcc_latest.tar 拷贝到无法联网的主机。

步骤 2:在无网络环境中构建和运行 Docker 镜像

  1. 创建C++程序
vi hello.cpp

内容如下:

#include <iostream>
int main() 
{
    std::cout << "Hello from Docker and C++!" << std::endl;
    return 0;
}
  1. 创建 Dockerfile
    用于描述如何构建我们的 Docker 镜像。
vim Dockerfile

内容如下:

#使用基础镜像
FROM gcc:latest

#将本地文件复制到容器中的指定路径
COPY hello.cpp /usr/src/hello.cpp
 
#设置工作目录
WORKDIR /usr/src
 
#编译 C++ 程序
RUN g++ -o hello hello.cpp
 
#运行可执行文件
CMD ["./hello"]

这个 Dockerfile 使用了 GCC 官方镜像作为基础,然后将我们的 hello.cpp 文件复制到容器的 /usr/src 目录,并在容器中编译它。最后通过 CMD 指令运行了编译后的可执行文件。

  1. 加载 Docker 镜像
    在无联网环境中,将之前传输的 gcc_latest.tar 文件加载到 Docker:
docker load -i gcc_latest.tar
  1. 构建 Docker 镜像
    在项目文件夹中执行以下命令:
docker build -t my-cpp-app .

这将根据 Dockerfile 中的描述构建一个名为 my-cpp-app 的 Docker 镜像。

  1. 运行 Docker 容器
    执行如下命令:
docker run my-cpp-app

这将运行 Docker 容器,并在控制台上打印 “Hello from Docker and C++!”。

测试完记得清理该docker容器与模板。

5.2 示例:虚拟机环境

  1. 创建并运行 Docker 容器
    创建并运行容器,指定共享内存大小,并挂载本地目录到容器目录。假设本地需要挂载的目录是 /home/shuym/,在容器内访问路径是 /root/host:
docker run -it --privileged --name shuym-centos-container --shm-size=1g -v /home/shuym/my_test:/root/host centos:7.4.1708 /bin/bash

命令解释
docker run:这是用来创建并启动一个新的容器的命令。
-it:
-i(interactive):保持标准输入打开,即使没有附加到容器上。
-t(tty):分配一个伪终端。通常与 -i 一起使用,以便用户能够以交互模式使用容器。
–privileged:授予容器扩展权限。这允许容器内的进程执行更多的系统操作,例如挂载设备、修改网络设置等。使用该标志可以让容器拥有更高的权限,但也存在安全风险。
–name shuym-centos-container:为容器指定一个名称 shuym-centos-container,便于后续管理和识别。
–shm-size=1g:设置容器的 /dev/shm 共享内存的大小为 1GB。默认值通常是 64MB。
-v /home/shuym/my_test:/root/host:
-v(volume):挂载一个主机目录到容器中。这是一个数据卷的映射,用于在主机和容器之间共享文件。
/home/shuym/my_test:主机上的目录。
/root/host:容器中的目录。在容器中,这个目录会映射到主机上的 /home/shuym/my_test 目录,因此你可以在容器中访问和操作主机上的这些文件。
centos:7.4.1708:指定使用的 Docker 镜像。这表示基于 CentOS 7.4.1708 版本的镜像来创建容器。

/bin/bash:容器启动时执行的命令。在这种情况下,它启动一个 Bash shell,这样你可以在容器中进行交互式操作。

  1. 进入创建的目录
cd /root/host

即可将原目录内容创建到docker 容器当前目录下。

6 Docker Hub 上传与下载
6.1 Docker Hub上传
首先,需要在 Docker Hub 上创建一个帐户。
在终端登录你的 Docker Hub 帐户:

docker login

输入你的 Docker Hub 用户名和密码。

接下来,需要给 Docker 镜像一个标签,以便将其上传到 Docker Hub。使用以下命令:

docker tag my-docker-example your-docker-hub-username/my-docker-example:latest

确保将 your-docker-hub-username 替换为你在 Docker Hub 上的用户名。

最后,使用以下命令将标记过的镜像上传到 Docker Hub:

docker push your-docker-hub-username/my-docker-example:latest

这会将你的 Docker 镜像上传到 Docker Hub。

6.2 Docker Hub下载运行
使用以下命令从 Docker Hub 下载你的 Docker 镜像:

docker pull your-docker-hub-username/my-docker-example:latest

这会从 Docker Hub 下载你的 Docker 镜像到本地机器。

下载完成后,可以运行该镜像:

docker run -d -p 8080:80 your-docker-hub-username/my-docker-example:latest

这将在后台运行从 Docker Hub 下载的 Docker 镜像,并将主机的 8080 端口映射到容器的 80 端口。

现在,可以在浏览器中打开 http://localhost:8080,这时候应该能够看到与之前相同的简单网页,显示 “Hello from Docker!”。

7 总结
Docker 通过容器化技术简化了应用程序的开发、测试和部署过程,使得在不同环境中的应用程序运行更加一致。通过上述示例,可以看到如何编写 Dockerfile 构建镜像并运行容器。掌握 Docker,可以大大提升开发和运维的效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值