ubuntu下docker的使用

本文最后更新于:2022年6月8日 晚上

ubuntu下docker的使用

由于 vmware 太重了,所以后续准备使用 docker 来完成各种各样板卡环境的配置。

docker 中的系统与宿主机使用 ssh 通信。

docker 安装与配置

docker架构

具体介绍详见 Docker 架构及工作原理

安装 docker 本体

终端执行

1
curl -sSL https://get.daocloud.io/docker | sh

验证安装是否成功

1
sudo docker run hello-world

出现了以下,表示成功。

配置 18.04 的 ubuntu 镜像

配置16或者其它版本的ubuntu镜像也是如此,可在https://hub.docker.com/ 搜索镜像,或者使用命令docker search ubuntu来搜索ubuntu相关的镜像。

1
sudo docker pull ubuntu:18.04

运行 ubuntu18.04

sudo docker images先查看 ubuntu18.04 对应的id c6ad7e71ba7d

1
sudo docker run -itd --name ubuntu18.04 c6ad7e71ba7d

共享宿主机目录

1
docker run  --mount type=bind,source="$(pwd)"/data,target=/home/data -it <name_of_container> /bin/bash

共享宿主机下的目录/home/u/data,在docker中的/home/data显示

如果要共享,仅需执行这个命令就可以了。

1
sudo docker run --mount type=bind,source=/home/u/data,target=/home/data  -itd --name ubuntu18.04 c6ad7e71ba7d /bin/bash

不加/bin/bash可能会报错。。

执行 ubuntu18.04

1
2
3
sudo docker exec -it ubuntu18.04 /bin/bash
# 会直接显示下面终端,表示已经进入了docker中的ubuntu18.04
root@98c152bc6c63:/#

停止容器

1
2
3
4
5
6
7
8
9
10
# 使用如下命令查看容器的name或者是id
sudo docker container ls

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
86ad708ba348 c6ad7e71ba7d "bash" 26 minutes ago Up 26 minutes ubuntu18.04

# 停止指定的容器
sudo docker stop ubuntu18.04
#
sudo docker stop 86ad708ba348

删除容器

1
sudo docker rm 容器名或id

删除镜像

1
2
3
sudo docker rmi 镜像id
# 例如
sudo docker rmi c6ad7e71ba7d

第二次进入docker中的镜像

1
2
3
4
5
6
7
8
9
10
# 1. 获取镜像id和名称
sudo docker ps -a

CID=a5bab384761f
# 2. 防止容器正在运行,首先停止容器,在开始
sudo docker stop $CID
sudo docker start $CID

# 3.进入容器,并执行 service ssh start,其目的是开启ssh服务
sudo docker exec -it $CID /bin/bash service ssh start

查看容器占用大小

1
sudo docker system df -v

ubuntu配置

配置ssh服务

接下来拷贝数据进入,首先得保证ssh通的,ssh首先得先安装,先换源。

1
2
3
4
5
sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
sed -i '/security.ubuntu.com/d' /etc/apt/sources.list

apt clean
apt update

安装常用软件

1
apt install -y git vim ssh openssh-server net-tools

推送文件到docker上的ubuntu发现22端口拒绝

修改ssh配置

1
2
3
4
5
# 去掉PermitRootLogin项注释,将value改为yes
vim /etc/ssh/sshd_config
# -----------------------------------------------------------------------
#PermitRootLogin prohibit-password
PermitRootLogin yes

重启ssh

1
/etc/init.d/ssh  restart

修改本机密码

passwd,随便按一个就行

接着上传,就可以了。

安装编译所需

1
2
apt install -y gcc g++ make gawk bison libncurses-dev libncurses5-dev  zlib1g-dev python unzip 
apt install -y ninja-build

配置非 root 用户

推荐使用非root用户,但又有root权限

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
# 安装sudo 
apt install sudo

# 添加用户
adduser u

# 为新用户设置密码
passwd u

# 为该用户指定命令解释程序
usermod -s /bin/bash u

# 为该文件添加写权限,默认只有读权限
chmod u+w /etc/sudoers

# 编辑sudoers
vim /etc/sudoers
# 在 root ALL=(ALL:ALL) ALL 后追加新行,如下图
u ALL=(ALL:ALL) ALL

# 恢复只读权限
chmod u-w /etc/sudoers

# 给新目录添加读写权限
chown u:u -R /home/u

# 切换到新用户
su u

从此刻开始,以非root用户编译lede

同步时间

首先安装 tzdata,否则会报错

1
2
3
u@86ad708ba348:~/gn$ tzselect 
/usr/bin/tzselect: line 180: /usr/share/zoneinfo/iso3166.tab: No such file or directory
/usr/bin/tzselect: time zone files are not set up correctly
1
sudo apt install tzdata

接着安装完之后会让你配置时区,选择 6.Asia - 70.Shanghai

接着运行 tzselect

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
u@86ad708ba348:~/gn$ tzselect 
Please identify a location so that time zone rules can be set correctly.
Please select a continent, ocean, "coord", or "TZ".
1) Africa
2) Americas
3) Antarctica
4) Asia
5) Atlantic Ocean
6) Australia
7) Europe
8) Indian Ocean
9) Pacific Ocean
10) coord - I want to use geographical coordinates.
11) TZ - I want to specify the time zone using the Posix TZ format.
#? 4
Please select a country whose clocks agree with yours.
1) Afghanistan 18) Iraq 35) Pakistan
2) Antarctica 19) Israel 36) Palestine
3) Armenia 20) Japan 37) Philippines
4) Azerbaijan 21) Jordan 38) Qatar
5) Bahrain 22) Kazakhstan 39) Russia
6) Bangladesh 23) Korea (North) 40) Saudi Arabia
7) Bhutan 24) Korea (South) 41) Singapore
8) Brunei 25) Kuwait 42) Sri Lanka
9) Cambodia 26) Kyrgyzstan 43) Syria
10) China 27) Laos 44) Taiwan
11) Cyprus 28) Lebanon 45) Tajikistan
12) East Timor 29) Macau 46) Thailand
13) Georgia 30) Malaysia 47) Turkmenistan
14) Hong Kong 31) Mongolia 48) United Arab Emirates
15) India 32) Myanmar (Burma) 49) Uzbekistan
16) Indonesia 33) Nepal 50) Vietnam
17) Iran 34) Oman 51) Yemen
#? 10
Please select one of the following time zone regions.
1) Beijing Time
2) Xinjiang Time
#? 1

The following information has been given:

China
Beijing Time

Therefore TZ='Asia/Shanghai' will be used.
Selected time is now: Fri May 6 08:49:39 CST 2022.
Universal Time is now: Fri May 6 00:49:39 UTC 2022.
Is the above information OK?
1) Yes
2) No
#? yes
Please enter a number in range.
#? 1

You can make this change permanent for yourself by appending the line
TZ='Asia/Shanghai'; export TZ
to the file '.profile' in your home directory; then log out and log in again.

Here is that TZ value again, this time on standard output so that you
can use the /usr/bin/tzselect command in shell scripts:
Asia/Shanghai

在拷贝时区到localtime中

1
sudo cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 

使用date -R 就可查到更改的时间了。

参考

  1. Docker 教程

  2. ubuntu 一键换源

  3. Docker Ubuntu上安装ssh和连接ssh

  4. Ubuntu修改时区和更新时间

  5. Having Docker access External files

  6. docker容器添加对外映射端口


ubuntu下docker的使用
https://www.glj0.top/posts/6c58185/
作者
gong lj
发布于
2022年5月11日
更新于
2022年6月8日
许可协议