Docker部署指南

1、介绍

Docker 是⼀个开源的应⽤容器引擎,开发者可以打包应⽤和依赖包到⼀个轻量级、可移植的容器中,然后发布到任何流⾏的 Linux机器上,能够更⾼效的利⽤系统资源、保证⼀致的运⾏环境,实现持续交付和部署,以及后期更轻松的迁移、维护、扩展。

2、安装

2.1 Debian族发行版,如 Debian、Ubuntu

sudo apt-get install docker.io

2.2 Relhat系发⾏版,如Redhat、fedora、centos

sudo yum install docker
sudo dnf install docker

3、使用

3.1 通过 Dockerfile 创建镜像

# $name:$tag 镜像名称:标签名称
# Dockfile 基于上下⽂构建,构建⽬录必须包含Dockerfile
# $dockerfile 指定 Dockerfile 名称,默认是 PATH/Dockerfile
# $dockerfile_dir Dockerfile 所在路径是 PATH
sudo docker build -f $dockerfile -t $name:$tag $dockerfile_dir

3.2 删除镜像或者容器

# $imageID 镜像ID
sudo docker rmi $imageID
# $containerID 容器ID
sudo docker rm $containerID

3.3 重命名镜像或者容器

# $imageID 镜像ID
# $name:$tag 镜像名称:标签名称
sudo docker tag $imageID $name:$tag
# $containerID 容器ID
# $name 容器名称
sudo docker rename $containerID $name

3.4 查镜像或者容器

sudo docker image ls
sudo docker container ls

3.5 运⾏ Docker 环境

#运⾏ Docker 环境
# --privileged 特权模式
# -it 表⽰开启交互模式, /bin/bash 表⽰交互⽅式
# -v $host_dir:$docker_dir 将主机⽬录映射到 Docker 内
# -p $host_port:$docker_port 将主机端口映射到 Docker 内
# -u $docker_user 指定使⽤ Docker 内⽤⼾登陆
# -w $cwd_dir 切换到容器内的路径
# -d --detach 设置后台运⾏模式
#运⾏指定的镜像
sudo docker run --privileged -it -u $docker_user -v $host_dir:$docker_dir
$imageID /bin/bash
#运⾏指定的容器
sudo docker exec -it -w $cwd_dir $containerID /bin/bash

4、镜像管理

#登录 dockerhub 账号
sudo docker login -u $username -p $password
#拉取 dockerhub 镜像
sudo docker image pull $imageID
#推送镜像到 dockerhub
sudo docker image push $username/$imagename
#导出本地镜像(tar archive file)
sudo docker image save $name:$tag -o ${dockerimage.tar}
#导⼊本地镜像(tar archive file)
sudo docker image load -i ${dockerimage.tar}
#本地镜像提交修改
# -m 提交的描述信息
# -a 提交的作者
# $containerID 发⽣修改的容器ID
# $new_name:$new_tag 提交后的镜像名称标签
sudo docker commit -m $commit_message -a $author $containerID $new_name:$new_tag

5. 镜像构建使⽤举例

5.1 使⽤ Dockerfile 构建镜像

#参考该⽂档提供的 Dockerfile
#假定 Dockerfile 位于 /home/docker/Dockerfile
cd /home/docker
sudo docker build -t docker_rk:latest .

5.2 使⽤ Docker 镜像编译 SDK

#假定 SDK 位于 /home/user/SDK
#将 SDK 映射到 Docker 镜像内,并进⼊镜像内
sudo docker run --privileged -it -u rk -v /home/user/SDK:/home/rk
docker_rk:latest /bin/bash
#切换到 Docker 内的路径,编译⽅法可以通过 build.sh -h 查看
cd /home/rk
./build.sh -h

5.3 更新本地Docker

#退出 Docker 镜像后,除映射⽬录外的所有修改都不会保留,要保留相应修改需要更新 Docker 镜像
#假定本次镜像实例化的容器为 rk@ecbbcdc7e5ca:/$
#按照以下命令,更新 Docker 镜像
sudo docker commit -m "update" ecbbcdc7e5ca docker_rk:latest

6、dockerfile参考

FROM ubuntu:21.04
ENV DEBIAN_FRONTEND=noninteractive
RUN \
# use the default source,or choose the most appropriate software source,following
is an example
echo "deb http://mirrors.ustc.edu.cn/ubuntu/ hirsute main restricted universe
multiverse\n\
deb http://mirrors.ustc.edu.cn/ubuntu/ hirsute-security main restricted universe
multiverse\n\
deb http://mirrors.ustc.edu.cn/ubuntu/ hirsute-updates main restricted universe
multiverse\n\
deb http://mirrors.ustc.edu.cn/ubuntu/ hirsute-backports main restricted universe
multiverse" \
> /etc/apt/sources.list \
&& apt-get update -y && apt-get upgrade -y \
&& apt-get install -y curl \
&& curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > /usr/bin/repo &&
chmod 755 /usr/bin/repo \
&& apt-get install -y build-essential make cmake gcc g++ gcc-multilib g++-
multilib device-tree-compiler \
binfmt-support qemu-user-static live-build chrpath diffstat fakeroot patchelf
expect texinfo flex bison \
libelf-dev libssl-dev liblz4-tool ncurses-dev libegl1-mesa libsdl1.2-dev xz-utils
debianutils iputils-ping \
vim tree net-tools bc cpio time rsync ssh gawk unzip git git-core fdisk sudo zstd
wget socat xterm strace \
python python3 python3-pip python3-pexpect python3-git python3-jinja2 python3-
crypto \
&& pip3 install pyelftools -i http://pypi.mirrors.ustc.edu.cn/simple/ --trustedhost pypi.mirrors.ustc.edu.cn \
# add user in docker
&& useradd -c 'rk user' -m -d /home/rk -s /bin/bash rk && sed -i -e '/\%sudo/ c
\%sudo ALL=(ALL) NOPASSWD: ALL' /etc/sudoers && usermod -a -G sudo rk \
# delete useless package and cache,reduce docker image size
&& apt-get autoclean && apt-get autoremove && rm -rf /var/lib/apt/lists/*

7、FAQ

7.1 获取镜像失败,error pulling image configuration: Get https:......read: connection reset by peer

当前⽹络⽆法访问 Docker 官⽹镜像仓库,可以通过配置 Docker 国内镜像仓库,解决⽆法访问的问题, 可参考以下修改:

#在 /etc/docker/daemon.json 添加以下内容
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn/"]
}

7.2 ⽬标机上 dockerd 启动过程,存在⼤量警告,并异常退出,⽆法 运⾏

(1)docker 需要内核开启 cgroups、namespace、netfilter、overlayfs 等配置⽀持,才能正常运⾏,可以通 过运⾏ /usr/share/docker.io/contrib/check-config.sh 脚本检查当前系统内核的配置是否满⾜ docker 运⾏的要 求。

(2)cgroupfs 没有挂载问题,通常发⽣在 Buildroot 系统上,需要⼿动完成 cgroupfs 系统的挂载,挂载脚 本可以参考: https://github.com/tianon/cgroupfs-mount。 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值