需求:为了开放设备给客户使用,在设备里面创建docker镜像ubuntu,客户程序跑在ubuntu里面。
一、docker安装
1.先将docker安装包(docker-26.1.4.tgz)拷贝到DM系统中。
2.解压docker安装包
tar zxf docker-26.1.4.tgz
3.将docker可执行程序拷贝到/usr/bin/下面
cp docker/* /usr/bin/
4.启动docker守护进程
dockerd &
5.验证docker守护进程启动成功
docker info
================================================================================================================
docker守护进程未启动是下面这种情况
root@topeet:~$ docker info
Client:
Version: 26.1.4
Context: default
Debug Mode: false
Server:
ERROR: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
errors pretty printing info
------------------------------------------------------------------------------------------------------------------
docker守护进程已启动是下面这种情况
Client:
Version: 26.1.4
Context: default
Debug Mode: false
Server:
Containers: 8
Running: 2
Paused: 0
Stopped: 6
Images: 2
Server Version: 26.1.4
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: cgroupfs
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 runc
Default Runtime: runc
Init Binary: docker-init
containerd version: ae71819c4f5e67bb4d5ae76a6b735f29cc25774e
runc version: v1.1.12-0-g51d5e94
init version: de40ad0
Security Options:
seccomp
Profile: builtin
Kernel Version: 5.10.110
Operating System: Ubuntu 20.04 LTS
OSType: linux
Architecture: aarch64
CPUs: 8
Total Memory: 7.739GiB
Name: topeet
ID: b2d4d032-8585-4278-af2b-515da756d1aa
Docker Root Dir: /var/lib/docker
Debug Mode: false
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
Product License: Community Engine
------------------------------------------------------------------------------------------------------------------
6.将docker注册成系统服务(记得kill docker服务后,再执行这一步哦)
添加 /usr/lib/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
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
-------------------------------------------------------------------------------------------------------------------
7.启动 / 停止 docker 服务
systemctl start docker
systemctl stop docker
8.开机自启/取消开机自启 docker 服务
systemctl enable docker
systemctl disable docker
二、docker镜像安装和执行
1.查看存在的镜像
docker images
2.拉去ubuntu镜像
docker pull ubuntu
3.启动和停止镜像
docker start ubuntu
docker stop ubuntu
4.导出和导入镜像
①导出镜像
docker save -o ubuntu.tar ubuntu
②导入镜像
docker load -i ubuntu.tar
5.镜像运行
①自动重启运行
docker run --restart=always -d lv-ubuntu
关闭自动重启
docker update --restart=no b1fa9fb52829
②使用 tail 命令保持容器后台持续运行
docker run -d lv-ubuntu tail -f /dev/null
③使用 -v 标志将宿主机的目录映射到容器内部的目录。格式为 -v <宿主机目录>:<容器内目录>
为了docker内部镜像ubuntu里面的文件持久化
docker run -v /home/new:/home/ubuntu -it lv-ubuntu
④组合起来
docker run --restart=always -v /home/new:/home/ubuntu -d lv-ubuntu tail -f /dev/null
6.查看运行中的镜像
docker ps
-----------------------------------------------------------------------------------------------------------
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c018723648df ubuntu "tail -f /dev/null" 3 seconds ago Up 3 seconds affectionate_williamson
-----------------------------------------------------------------------------------------------------------
7.登陆ubuntu镜像
docker exec -it c018723648df /bin/bash
8.修改完的镜像保存为新镜像
docker commit c018723648df lv-ubuntu
三、创建新用户开放给客户使用
1.创建ubuntu用户
adduser ubuntu
2.解决新用户ubuntu没有docker权限
chmod o+rwx /var/run/docker.sock
四、dockerfile管理镜像(开机启动脚本)
1、创建Dockerfile,只能拷贝到/目录或者/usb/bin 这种目录,不能拷贝到/home/ubuntu目录
==================================================================================================================
FROM 53e7dddb84a1
COPY ./lv_start.sh /lv_start.sh
RUN chmod +x /lv_start.sh
ENTRYPOINT ["/bin/bash", "/lv_start.sh"]
==================================================================================================================
root@topeet:/home/new$ vi lv_start.sh
#!/bin/bash
sleep 5
/home/ubuntu/tcp_client_test &
while true; do
date >> /home/ubuntu/test
done
==================================================================================================================
2.执行Dockerfile
docker build -t lv .
3.运行docker镜像
docker run -v /home/new:/home/ubuntu -d lv