Docker容器部署使用和打包编译C程序
安装Docker并配置启动
yum源安装
yum install -y docker gcc
复制
安装包安装
下载对应CPU架构的安装包:
https://download.docker.com/linux/static/stable/
# 上传并解压
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
复制
使用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
复制
创建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 选项表示在容器退出后自动删除容器
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
目录