lab

0、docker搭建linux环境(for Windows)

docker官网下载 docker desktop

右上角点击Get Started,选择Download for Windows进行下载并安装

打开cmd,通过docker --version 命令查看是否安装成功

配置docker镜像

打开docker desktop,在设置中找到Docker Engine,将原有文本修改成如下并Apply & restart

1
2
3
4
5
6
7
8
9
{
"experimental": false,
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn"
],
"features": {
"buildkit": true
}
}

cmd中输入docker info并显示有如下信息即可

拉取Linux镜像并新建容器

这里选择CentOS系统,当然也可以使用其他系统,只需要修改命令参数

输入docker pull centos即可拉取最新的centos镜像,如果需要特定版本的镜像,则在系统名字后加上版本参数如docker pull centos:7

还可以输入docker images查看本地主机上的镜像

其中,

RESPOSITORY 是镜像的仓库源,TAG 是镜像的标签,代表不同版本,IMAGE ID 是镜像ID,CREATED 是镜像的创建时间,SIZE是镜像的大小

docker中镜像相当于一个类,如果运行还需要将类进行实例化,也就是新建一个容器

docker run -it centos /bin/bash

其中,

选项-i 指交互式操作,-t 指终端,it通常一起使用,/bin/bash 表面希望有个交互式shell,centos不指定版本则默认使用最新版本即lastest

[root@9c2ab6d80ac1 /]#即进入centos系统界面

打开原有容器而非创建

以刚新建的centost容器为例,

  • 从docker desktop复制其name或者ID号
  • docker start 9c2ab6d80ac14f1edf1dec3f89c9b6f759018913f2e13a8086c3c30c24ba0dd9或者docker start csapp_env让容器启动
  • docker exec -it 9c2ab6d80ac14f1edf1dec3f89c9b6f759018913f2e13a8086c3c30c24ba0dd9 /bin/bash以交互式操作进入容器
  • [root@9c2ab6d80ac1 /]#centos系统界面
  • 退出容器则输入exit

这里,除了exec也可以使用attach命令进入容器,attach如果从这个容器退出,就会导致容器的停止

1、datalab

挂载目录实现Linux机与主机文件同步

  • 首先在主机中建立要共享的文件夹,复制其绝对路径,如C:\Users\amour\csapp\lab
  • 运行docker container run -it -v "C:\Users\amour\csapp\lab":/csapp --name=csapp_env contos /bin/bash,实现挂载,其中,在容器中的目录名为csapp,容器名为csapp_env
  • 验证挂载情况,进入容器中的目录cd csapp,再用ls指令查看子文件是否与主机中的一致

配置编译环境

  • 更新yum源,yum -y update

    [报错1] 由于本地语言环境不适配可能会出现Failed to set locale, defaulting to C.UTF-8报错,则需要先安装响应的语言包和语言环境

    • locale -a查看目前已安装的语言包

    • yum install glibc-langpack-zh安装中文语言包

      [报错2] 这一步可能又会出现Failed to download metadata for repo 'appstream',需要将软件包修改源,在/etc/yum.repos中更新repos.d使用vault.centos.org代替mirror.centos.org

      • cd /etc/yum.repos.d

      • vi CentOS-Linux-BaseOS.repo

        1
        2
        3
        4
        5
        6
        7
        8
        [baseos]
        name=CentOS Linux $releasever - BaseOS
        #mirrorlist=http://mirrorlist.centos.org/release=$releasever&arch=$basearch&repo=BaseOS&infra=$infra
        #baseurl=http://mirror.centos.org/$contentdir/$releasever/BaseOS/$basearch/os/
        baseurl=https://vault.centos.org/centos/$releasever/BaseOS/$basearch/os/
        gpgcheck=1
        enabled=1
        gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
      • vi CentOS-Linux-AppStream.repo

        1
        2
        3
        4
        5
        6
        7
        8
        [appstream]
        name=CentOS Linux $releasever - AppStream
        #mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=AppStream&infra=$infra
        #baseurl=http://mirror.centos.org/$contentdir/$releasever/AppStream/$basearch/os/
        baseurl=https://vault.centos.org/centos/$releasever/AppStream/$basearch/os/
        gpgcheck=1
        enabled=1
        gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
    • dnf install glibc-langpack-en

    • 此时再输入locale -a查看目前的语言包,发现除了原有的C.utf8之外,还有其他的en_utf8zh_utf8,至此,已解决语言环境不适配导致无法使用yum更新下载的问题

  • yum install sudo安装sudo

  • yum install make automake gcc gcc-c++ kernel-devel安装c/c++编译环境

  • yum install gdb安装gdb调试器

  • yum install glibc-debel.i686安装32位嵌入式C库

  • 完成配置

至此,可以在主机的编译器中编写代码保存到共享目录中,在docker的虚拟centos容器中编译和运行代码

如:在共享目录中创建hello.c文件并编写好,进入容器中的共享文件夹cd csapp/L0/,使用make hello进行编译,./hello即可运行


lab
https://kevin346-sc.github.io/2023/03/10/lab/
作者
Kevin Huang
发布于
2023年3月10日
许可协议