暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

Docker容器一键部署使用和打包编译C程序

112

Docker容器部署使用和打包编译C程序

安装Docker并配置启动

yum源安装

yum install -y docker gcc
复制

安装包安装

下载对应CPU架构的安装包:
https://download.docker.com/linux/static/stable/
1.png

# 上传并解压 tar -zxvf docker-<version>.tgz # 将解压后的Docker可执行文件复制到系统的bin目录下 cp docker/* /usr/bin/
复制

配置Docker服务

vi /etc/systemd/system/docker.service

[Unit] Description=Docker Application Container Engine Documentation=https://docs.docker.com After=network-online.target firewalld.service Wants=network-online.target [Service] Type=notify ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock ExecReload=/bin/kill -s HUP $MAINPID LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity TimeoutStartSec=0 Delegate=yes KillMode=process Restart=on-failure StartLimitBurst=3 StartLimitInterval=60s [Install] WantedBy=multi-user.target
复制

镜像源配置
vi /etc/docker/daemon.json

{ "registry-mirrors": ["https://docker.1ms.run","https://mirrors.ustc.edu.cn","http://mirrors.aliyun.com"] }
复制

文件授权,重新加载systemd配置文件并启动Docker服务

chmod +x /etc/systemd/system/docker.service systemctl daemon-reload systemctl start docker systemctl enable docker
复制

验证Docker服务是否启动成功

systemctl status docker docker version docker info
复制

image.png

使用Docker打包和运行本地的C程序

准备一个C程序

vi hello.c

#include <stdio.h> int main() { printf("Hello, World!\n"); return 0; }
复制

编译试运行

用gcc工具编译生成同名的可执行文件 hello 并尝试调用执行

gcc -o hello hello.c ./hello
复制

image.png

创建Dockerfile

vi Dockerfile

# 使用一个基础镜像,这里选择gcc FROM gcc:9.2.0 # 创建一个工作目录 WORKDIR /app # 将本地编译好的可执行文件复制到镜像中,可执行文件与Dockerfile在同一目录下 COPY hello /app/hello # 指定环境变量路径,有相关依赖用COPY拷进时需要指定 ENV LD_LIBRARY_PATH /app # 设置容器启动时执行的命令 CMD ["./hello"]
复制

构建Docker镜像

docker build -t hello_world_app .
复制

-t hello_world_app是给镜像指定一个标签(tag)
. 表示使用当前目录下的Dockerfile

运行Docker容器

docker run --rm hello_world_app
复制

–rm 选项表示在容器退出后自动删除容器
image.png

Docker 容器运维

# 查看容器镜像 docker images # 查看运行中的容器/进程 docker ps # 停止运行中的容器 docker stop 容器ID(IMAGE ID) # 移除容器 docker rm 容器ID(IMAGE ID) # 移除已停止的镜像 docker rmi 镜像ID # -f 通过信号强制移除运行中的容器 docker rmi -f 镜像ID # 进入容器 docker exec -it 容器名 bash
复制

运行GCC容器

拉取镜像后,您可以通过以下命令运行一个GCC容器:

docker run -it gcc:9.2.0 /bin/bash
复制

该命令将启动一个交互式的GCC容器,并进入bash环境。

挂载本地代码

如果您需要在宿主机上编辑代码并编译,可以使用Docker的卷(volume)功能将宿主机的代码目录挂载到容器中。以下命令将本地/path/to/code目录挂载到容器的/opt/code目录:

docker run -it -v /path/to/code:/opt/code gcc:9.2.0 /bin/bash
复制

在容器中,您可以直接编辑/opt/code目录下的代码,并使用GCC编译器编译。

在odbc默认日志打印在/tmp目录下,容器运行完会自动清理,可采用该方法将日志保留在本地

构建新镜像

如果需要永久保存对容器内文件的更改,可以使用docker commit命令创建一个包含修改后的文件的新镜像

# 查看运行中的容器/进程 docker ps # 构建新镜像 docker commit <container-id> <new-image-name>
复制

镜像导出

如果您需要将GCC编译环境导出为镜像,可以使用以下命令:

docker run -it --name gcc_env gcc:9.2.0 /bin/bash # ... 编译程序 ... docker export gcc_env > gcc_env.tar
复制

该命令将GCC编译环境导出为gcc_env.tar文件,您可以将其分发到其他机器。

加载镜像

docker load -i gcc_env.tar
复制

清理磁盘空间

[root@dba ~]# docker system --help Usage: docker system COMMAND Manage Docker Options: --help Print usage Commands: df Show docker disk usage events Get real time events from the server info Display system-wide information prune Remove unused data Run 'docker system COMMAND --help' for more information on a command.
复制

删除不必要的文件或镜像

docker system prune -a
复制
最后修改时间:2025-03-23 11:13:22
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论

目录
  • 安装Docker并配置启动
    • yum源安装
    • 安装包安装
    • 配置Docker服务
    • 验证Docker服务是否启动成功
  • 使用Docker打包和运行本地的C程序
    • 准备一个C程序
    • 编译试运行
    • 创建Dockerfile
    • 构建Docker镜像
    • 运行Docker容器
  • Docker 容器运维
    • 运行GCC容器
    • 挂载本地代码
    • 构建新镜像
    • 镜像导出
    • 加载镜像
    • 清理磁盘空间