Docker - Docker容器部署方法初探

开发平台要从stm32切换到rk3568,对linux驱动及应用开发了解基本为零。准备在linux服务器上实现交叉编译等,笔记本远程vscode码代码。先从开发环境搭建开始吧,使用Docker搭建Linux开发环境,第一步得先了解Docker。

实战记录Docker安装、构建镜像。参考了Tronlong提供的文档。

1、Docker安装

直接上鱼香的一键安装工具,太香了。命令如下,记得把镜像源一起换掉。

鱼香工具:
wget http://fishros.com/install -O fishros && . fishros


换镜像源后重启守护进程:
sudo systemctl daemon-reload

重启服务:
sudo systemctl restart docker

安装后,通过运行Docker 自带的hello-world 镜像来验证是否已安装成功。程序运行后,输出如下内容则表示Docker 安装成功。

sudo docker run hello-world

2、搭建本地镜像仓库

Docker 用Registry 来保存用户构建的镜像。Registry 分为公共和私有两种。Docker 公司运营的公共Registry 叫做Docker Hub,用户可在Docker Hub 注册账号,分享并保存自己的镜像。Docker 公司的公共镜像仓库(https://hub.docker.com)提供了庞大的镜像集合供用户使用。

一个Docker Registry 中可包含多个仓库,每个仓库可包含多个标签(Tag),每个标签对应一个镜像。通常,一个仓库会包含同一个软件不同版本的镜像,而标签对应该软件的各个版本。

用户可通过 “[<仓库名>:<标签>]” 的格式来指定具体是某个软件某个版本的镜像。如未给出标签,将以[latest]作为默认标签。

本次使用的镜像是registry:2,请执行如下命令自动下载并启动。

Host# mkdir -p /home/yan/docker/myregistry
Host# sudo docker run -d -p 5000:5000 -v /home/yan/docker/myregistry:/var/lib/registry registry:2
参数说明:
-d:后台启动容器。
-p:将容器的5000 端口映射至Ubuntu 的5000 端口(5000 是registry 服务端口)。
-v:将容器"/var/lib/registry"目录映射至Ubuntu 的"/home/yan/docker/myregistry",
用于存放镜像数据。

请执行如下命令,查看容器是否已启动,出现如下内容说明容器已正常启动。

sudo docker ps

请通过浏览器访问"http://192.168.121.129:5000/v2/_catalog",如返回如下内容则说明registry 已经成功启动,192.168.13.27 为Ubuntu 的IP。

由于刚建立运行,故里面无任何镜像内容。至此,Docker 环境安装完成。

3、构建镜像

新建工作目录"/home/tronlong/docker/dockerfile/",用FileZilla传入Tronlong软件资料中的文件系统压缩包和可执行文件。

mkdir /home/tronlong/docker/dockerfile

继续创建Dockfile文件,并写入以下内容:

#基于空的基础镜像构建新的镜像
FROM scratch 
# Set work directory
#为CMD、COPY 和AND 设置工作目录
WORKDIR /root 
# Decompress the file system
#解压文件系统
ADD rootfs-v1.0-4f56feee.tar / 
# Copy file to image
#拷贝可执行文件至镜像的"/home/root/"目录下
COPY led_flash . 
# Shell command executed when the container is started
# CMD ["executable","param1","param2"]
#容器启动时执行的shell 命令,此处为执行LED 闪烁程序的命令
CMD ["./led_flash", "-n 2"] 

在Dockerfile 文件所在的目录下执行如下命令,进行构建镜像。

sudo docker build -t 192.168.121.129:5000/led_flash:v1.0 . //注意命令最后含有"."
Host# sudo docker images //查看已构建的镜像

参数说明:
192.168.13.27:Ubuntu 的IP 地址;
-t:指定镜像的名字及标签(name:tag)。

执行如下命令,将镜像推送至本地仓库Registry。

sudo docker push 192.168.121.129:5000/led_flash:v1.0

这里本地上传私有镜像的时候遇到报错,Docker 版本从1.3.X 之后,与Docker Registry 交互默认使用https。由于前面搭建的私有仓库仅提供http 服务,因此当与私有仓库交互时将出现上面的错误提示。解决方法是,在docker server启动的时候,增加启动参数,默认使用HTTP访问:

gedit /usr/lib/systemd/system/docker.service

在12行后面增加  --insecure-registry  ip:5000  ,可以把原来的#注释掉。

修改好后重启docker 服务,见1。

先查询到container id号,重启容器。再次推送镜像。

sudo docker ps -a
sudo docker start 7ddee8c3895d //以查询得到的CONTAINER ID 号为准
sudo docker push 192.168.121.129:5000/led_flash:v1.0
CONTAINER ID:容器的唯一标识符;
IMAGE:容器所使用的镜像;
COMMAND:容器启动时执行的命令;
CREATED:容器的创建时间;
STATUS:容器的状态;
PORTS:容器所使用的端口;
NAMES:容器的名称。

Up:表示容器正在运行中。当容器启动后,Docker会自动将其状态设置为Up。此时可以使用docker ps命令查看容器的状态。

Created:表示容器已经被创建,但还未启动。当我们使用docker run命令创建一个新的容器时,Docker会将其状态设置为Created,此时容器的文件系统和元数据已经存在,但容器内部的进程还未启动。

Exit:表示容器已经停止运行。当容器中的进程停止或者容器被手动停止时,Docker会将其状态设置为Exit。此时可以使用docker ps -a命令查看容器的状态,其中Exited字段表示容器的状态为Exit。

通过浏览器访问"http://192.168.121.129:5000/v2/_catalog",即可看到当前仓库里已有的镜像。

  • 14
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值