在编译时经常会发生依赖关系难以处理的问题,此时在容器中去编译就能一部分解决这种问题,本文将在Docker中搭建一个基本的容器用于编译。
安装Docker
请参看本站文章Docker 手记(持续更新)。
创建容器
创建镜像
- 创建一个文件夹用于存放
dockerfile
和其他的脚本文件。 - 创建一个文件
dockerfile
:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31# 指定初始镜像
FROM ubuntu:18.04
# 解决build过程中卡在选择区域
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai
# 容器内换源
ADD sources.list /root/sources.list
RUN mv /etc/apt/sources.list /etc/apt/sources.list_bak
RUN cp /root/sources.list /etc/apt/sources.list
# 安装必要组件
RUN apt update && apt install -y nano wget curl openssh-server git
RUN mkdir -p /var/run/sshd
# 修改root密码并允许root从ssh使用密码登录
RUN echo root:mypassword | chpasswd
# 修改配置文件使得root能够从ssh登录
# 如果是ubuntu 20.04及以上版本请使用下面被注释的这行
# RUN sed -i 's/^#PermitRootLogin prohibit-password$/PermitRootLogin yes/g' /etc/ssh/sshd_config
RUN sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
# 安装nodejs 16.x
RUN curl -sLk https://raw.githubusercontent.com/nodesource/distributions/master/deb/setup_16.x | bash -
RUN apt update && apt install -y nodejs
# 启动sshd并保持运行
ADD run.sh /run.sh
RUN chmod 755 /run.sh
# 将22端口暴露出去,如果有其他需要还可以添加更多的端口
EXPOSE 22 80 443
CMD ["/run.sh"] - 创建换源文件,在Ubuntu 软件仓库镜像使用帮助中选择自己的版本,然后把里面文本框的内容直接输入到
sources.list
文件中,然后把这个文件和上面的dockerfile
放在同一个文件夹里面即可。 - 创建入口脚本:将该文件保存为
1
2
/usr/sbin/sshd -Drun.sh
然后和上面的dockerfile
保存到同一个文件夹即可。 - 从
dockerfile
build镜像:其中1
docker build -t myenv:1.0 .
myenv:1.0
分别为镜像名和tag,可根据自身需求进行更改。
启动容器
使用如下命令启动容器:
1 | docker run -d \ |
启动后使用ssh连接对应的端口即可。
参考dockerfile
ubuntu 18.04
见上方。
CentOS 7.9
1 | # 指定初始镜像 |