一键部署使用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值