在线咨询
QQ咨询
服务热线
服务热线:13125520620
TOP

Docker小记 — Docker Engine

发布时间:2018-2-21 浏览:3143

1. Docker安装 & 配置镜像加速器
 
a:
 
# step 1:安装必要的一些系统工具
apt update
apt -y install apt-transport-https ca-certificates curl software-properties-common
 
# step 2:安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add -
 
# Step 3:写入软件源信息
add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
 
# Step 4:更新并安装 Docker-CE
apt -y update
apt -y install docker-ce
b:
 
mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://jrzzvzok.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker
2. Dockerfile详解
 
Docker的架构很有魅力,他拥有类似于虚拟机性质的隔离机制,但并不是严格意义上的虚拟机。我还是喜欢拿货轮举例,以前我们是一条小船运一个集装箱的货物,现在可以把N个集装箱扔到一条大货轮上。每个容器(集装箱)共用宿主机(货轮)的内核(运载力),Dockerfile就像是每个集装箱中的货物清单和说明书,一般由以下五部分构成:
 
2.1 基础指令
 
FROM: 指定基础镜像,且必须位于第一行,使用格式如下:
 
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
Docker的原理基于Linux内核的隔离技术,且Linux From Scratch,因此FROM scratch是docker中最基础的镜像,debian、ubuntu和centos等都基于scratch之上。在实际的运用中,如果必须从零开始搭建镜像的一般都选择FROM debian作为基础镜像,不过大多数情况下一般都会以如下:FROM python、FROM nginx、FROM java等为基础镜像。
 
MAINTAINER:指定维护者信息,例:MAINTAINER user user@mail.com。
 
2.2 控制指令
 
RUN: 在构建的过程中指定需要被执行的命令,使用格式如下:
 
RUN command param1 param2 # 更推荐
RUN ["executable","param1","param2"]
WORKDIR: 用于切换构建过程中的工作目录,例:WORKDIR project。可配合环境变量使用,例:
 
ENV BASEDIR /project
WORKDIR $BASEDIR/test
ONBUILD: 在当前镜像被当做基础镜像时,执行其携带指令,例:
 
ONBUILD RUN echo "hello world"
“hello world”会在子镜像被构建的过程中输出。
 
2.3 引入指令
 
COPY: 拷贝文件或目录,格式:
 
COPY <src> <dest>
COPY ["<src>","<dest>"]
ADD: 在COPY的基础之上,ADD可识别压缩文件,例:ADD rootfs.tar.xz /。理论上也可添加网络地址,但还是建议在RUN指令中执行wget或curl命令,感觉这样更加可控。实际应用为了和COPY做功能区分,ADD一般只用作解压文件(仅我个人的使用习惯)。
 
2.4 执行指令
 
CMD: 容器启动时需要执行的命令,格式:
 
CMD ["executable","param1","param2"] # 更推荐
CMD ["param1","param2"]
CMD command param1 param2 
若在docker run中指定启动命令,则CMD将被覆盖。
 
ENTRYPOINT:主程序启动前的准备指令,用于启动主程序所依赖的服务,格式同CMD(基本上没用过就不介绍了,而且容易出错,不推荐使用)。
 
2.5 配置指令
 
EXPOSE: 暴露容器端口,格式:EXPOSE <port> [<port>...],注意此处的暴露端口和docker run 中-p指定的映射端口是两个概念。
ENV: 声明环境变量,格式:ENV <key>=<value> ...。
LABEL: 标记,格式:LABEL <key>=<value>...。
USER: 设置启动容器的用户,格式:USER daemo。
ARG: 设置变量,格式同ENV。
STOPSIGNAL: 容器停止时给应用程序发出的信号,例:STOPSIGNAL SIGKELL。
SHELL: 指定shell,例:SHELL ["bash","-c"]。
3. Docker 命令详解
 
为了避免喧宾夺主,此处仅摘录我个人操作中较为常用的命令。
 
3.1 生命周期管理
 
run: 创建并运行容器,格式:docker run [OPTIONS] IMAGE [COMMAND] [ARG...],参数说明:
 
-d , --detach            # 后台运行
-it, --interactive tty   # 交互终端形式运行
-p , --publish list      # 指定端口
-v , --volume list       # 挂载存储卷
     --name string       # 定义名字
     --rm                # 容器终止后自动删除(不支持在后台运行的容器)
     --restart string    # no、on-failure(非正常退出时重启,on-failure:3最多重启三次)、always、unless-stopped
docker run的参数甚多,可通过--help查询,后续这些复杂的配置都会移交给Docker Compose,以上几个足以应用70%~80%的场景,例:
 
# 类似ubuntu这类容器必须以-it交互终端形式运行,否则无法在后台保留
docker run -it -d --name my-ubuntu ubuntu
# 端口映射和挂载数据卷
docker run -d \
-p 8080:80 \
-v /data/www:/usr/share/nginx/html\
--name my-nginx nginx
start/stop/restart:docker start/stop/restart my-container。
rm:移除容器,格式:docker rm [OPTIONS] CONTAINER [CONTAINER...],参数说明:
 
-f, --force     Force the removal of a running container
-l, --link      Remove the specified link
-v, --volumes   Remove the volumes associated with the container
exec:在运行的容器中执行命令,不过更常用的还是先进入容器再执行命令,例子:docker exec -it my-nginx bash。
 
3.2 容器操作
 
ps: 列出容器,常用:docker ps -anq,参数说明:all、n last(最新n个容器)、quiet(只显示容器编号)。
top: 查看容器中的进程信息,例:docker top my-container。
logs: 查看容器日志,常用:docker logs -f --tail,参数说明:follow、--tail n(最新条日志)。
port:查看端口映射情况,例:docker port my-container。
3.3 镜像仓库
 
login/logout: 镜像仓库的登录和退出,格式:
 
docker login [OPTIONS] [SERVER]
docker logout  [SERVER]
如果是Docker Hub,则示例如下:
 
docker login -u username -p passward
docker logout
在生产环境中,我们一般会选择使用云厂商的镜像仓库,例:
 
docker login -u yo****@qq.com -p ****** registry-vpc.cn-hangzhou.aliyuncs.com
docker logout registry-vpc.cn-hangzhou.aliyuncs.com 
pull: 拉取镜像,最常用的命令之一,格式:docker pull [OPTIONS] NAME[:TAG|@DIGEST]。
push: 上传镜像,格式:docker push [OPTIONS] NAME[:TAG]。
 
3.4 本地镜像管理
 
images: 列出本地镜像,常用docker images -q,参数说明:quiet(只显示image Id)。
rmi: 删除本地镜像,常用docker rmi -f,参数说明:force。
tag: 标记镜像,归入仓库,格式:docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG],例:docker tag ubuntu youclk/my-ubuntu:v1。
build: 使用Dockerfile创建镜像,格式:docker build [OPTIONS] PATH | URL | -,参数说明:-t tag 例:docker build -t youclk/my-ubuntu:v1。
结语
 
静夜听钟却念念不安,举首相望,恐知者唯灯而~哀哉!整理至此,小弟拙笔盼君悦之。
 
软件定制,博远电子,友情提醒。

TAG
软件定制,软件开发,瀚森HANSEN
0
该内容对我有帮助