Docker 探秘

What is Docker?

Docker is the world’s leading software containerization platform.

What is a Container?

A standardized unit of software,Package software into standardized units for development, shipment and deployment.

Containers isolate software from its surroundings, for example differences between development and staging environments and help reduce conflicts between teams running different software on the same infrastructure.

  • LIGHTWEIGHT

Docker containers running on a single machine share that machine's operating system kernel; they start instantly and use less compute and RAM. Images are constructed from filesystem layers and share common files. This minimizes disk usage and image downloads are much faster.

  • STANDARD

Docker containers are based on open standards and run on all major Linux distributions, Microsoft Windows, and on any infrastructure including VMs, bare-metal and in the cloud.

  • SECURE

Docker containers isolate applications from one another and from the underlying infrastructure. Docker provides the strongest default isolation to limit app issues to a single container instead of the entire machine.
Container

What is a Container image ?

A container image is a lightweight, stand-alone, executable package of a piece of software that includes everything needed to run it: code, runtime, system tools, system libraries, settings. Available for both Linux and Windows based apps, containerized software will always run the same, regardless of the environment.

What is a Repository?

Docker Image Hub

Docker Installations

Install Docker Community Edition (CE) For MAC

$docker -v
$docker info
$sudo usermod -aG docker your_username
$newgrp docker

镜像加速

加速配置指引:https://cr.console.aliyun.com/#/accelerator
专用加速地址:https://registry.docker-cn.com/
如果有阿里云账号,可以使用专属的加速地址

Docker实战

Docker基础命令

$docker run hello-world
$docker run -d -p 80:80 --name webserver nginx
$docker run --name web -v /source/:/web -it ubuntu:14.04 /bin/bash
$docker run --rm --name vol -v /source/:/target:ro -it ubuntu:14.04 /bin/bash
$docker run -t -i -d --volumes-from vol --name test1 ubuntu:14.04 /bin/bash

Docker Arc

docker run - 运行一个容器

-t - 分配一个(伪)tty (link is external)
-i - 交互模式 (so we can interact with it)
-d - 后台模式
ubuntu:14.04 - 使用 ubuntu 基础镜像 14.04
/bin/bash - 运行命令 bash shell
-v /host:/container
-p hostPort:containerPort
--volumes-from=containerId
--link :alias选项指定链接到的容器。

Docker 常用命令

$docker images
$docker search image_id
$docker pull image_id
$docker create -it fedora bash
$docker start container_id
$docker stop container_id
$docker restart container_id
$docker inspect container_id
$docker ps -a
$docker ps -l
$docker top
$docker kill container_id

Docker 深入探秘

交互式创建镜像
$docker run -it --name test ubuntu bash
$docker attach [容器ID|容器名称]
$docker exec -it [容器ID|容器名称] /bin/bash
$xxx blabla ...
$docker differ [容器ID|容器名称]
$docker commit -a "yangdy@" -m "my ubuntu" a404c6c174a2  myubuntu:1.0 
$docker hisotry image_id
$docker cp [容器ID|容器名称]:/container_path to_host_path
网络映射 host
$docker run -d    --name db training/postgres
$docker run -d -P --name web --link db:db training/webapp python app.py
端口映射

docker run -p [([<host_interface>:[host_port]])|(<host_port>):]<container_port>[/udp] <image> <cmd>

$docker run -p 127.0.0.1:80:8080 <image> <cmd>

Docker自动化构建

自动化构建(基于Dockerfile)
  • 构建指令
$docker build -t tag .
$docker build --build-arg APP_NAME=appName --pull -f /home/admin/Dockerfile -t reg.docker.alibaba-inc.com/home/admin/appName/APP-META/docker-config
$docker push reg.docker.alibaba-inc.com/publish
  • 最简洁的构建文件,只添加应用包
# 用基础镜像地址替换下方镜像地址
FROM reg.docker.alibaba-inc.com/namespace/imageId:version

# 将构建出的主包复制到指定镜像目录中
COPY $APP_NAME.tgz /home/admin/${APP_NAME}/target/${APP_NAME}.tgz
  • 基础镜像
# 基于基础镜像
FROM reg.docker.alibaba-inc.com/namespace/imageId:version

# 备注
MAINTAINER yangdy@aliyun.com

# 定义参数
ARG xxx_version=1.0.0
# 定义基础镜像类型
ENV docker_type="xxx:1.8.0"

#这里,用docker的RUN命令,把需要软件,使用linux的rpm命令安装,以及初始化各种环境配置

RUN rpm -ivh --nodeps "http://rpmHost/xxx1.rpm" && \
rpm -ivh --nodeps "http://rpmHost/xxx2.rpm"

RUN wget -c "http://server/source.tgz" -O /home/admin/target.tgz

## 安装 xxx 脚本
RUN curl -sLk http://server/install.sh | sh


# 将应用启动脚本和nginx配置复制到镜像中
COPY templates/app/bin/ /home/admin/app/bin/
COPY templates/cai/ /home/admin/cai/
COPY templates/start.sh /home/admin/start.sh
COPY templates/stop.sh /home/admin/stop.sh

# 设置文件夹操作权限
RUN mkdir /home/admin/logs /home/admin/output /home/admin/diamond /home/admin/cai/logs && \
chmod -R a+x /home/admin/app/bin/ /home/admin/*.sh && \
chown -R admin:admin /home/admin/*

# 挂载数据卷,指定目录挂载到宿主机上面,为了能够保存(持久化)数据以及共享容器间的数据,为了实现数据共享,例如日志文件共享到宿主机或容器间共享数据.
VOLUME /home/admin/logs \
       /home/admin/output \
       /home/admin/cai/logs \
       
# 容器启动时自动执行的脚本,我们一般会将应用启动脚本放在这里,相当于系统自启应用
ENTRYPOINT ["/home/admin/start.sh"]

# 将Aone build的APP_NAME传进来
ONBUILD ARG APP_NAME
ONBUILD ENV APP_NAME=$APP_NAME
ONBUILD WORKDIR /home/admin/${APP_NAME}/bin

start.sh文件内容

#!/bin/bash
source /home/admin/entrypoint.sh

rm -f /home/admin/start.sh.code

/home/admin/xxx_app/bin/appctl.sh restart
code=$?
echo $code > /home/admin/start.sh.code
exit $code

镜像历史,发生了什么

$docker history --no-trunc imageId

阿里云镜像仓库

登录阿里云docker registry:

$ docker login -u dongyu.ydy reg.docker.alibaba-inc.com

登录registry的用户名是您的域账号,你可以在镜像管理首页点击右上角按钮修改docker login密码。

从registry中拉取镜像:

$ sudo docker pull reg.docker.alibaba-inc.com/namespace/image:version

将镜像推送到registry:

$docker tag [ImageId] reg.docker.alibaba-inc.com/public/repository:[镜像版本号]
$docker push reg.docker.alibaba-inc.com/public/repository:[镜像版本号]

其中[ImageId],[镜像版本号]请你根据自己的镜像信息进行填写。

搭建仓库

局域网搭建

docker registry是一个开源的代码仓库实现,我们可以直接拉下来在自己的本地建一个代码仓库,也可以直接用docker-hub官方的代码仓库.或者使用自己的服务空间搭建一套代码仓库。

安装本地的 docker registry

$docker run -d -p 5000:5000 registry

下载并启动一个registry容器创建本地的私有仓库服务.docker会自动去下载并安装registry
此时,我们可以将一些建好的docker放在本地registry里面

$docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry

启动本地私有仓库服务。监听5000端口

提交docker镜像

docker push 127.0.0.1:5000/test

提交成功以后,可以在宿主机上查看是否成功

curl https://127.0.0.1:5000/v1/search

之后,可以到任一机器去下载了,使用

docker pull ip:5000/test 即可

公网搭建

由于是在本机搭建的,只能在局域网内使用。如果想做公开的,可以在公网上搭建一个,本人尝试在阿里云的云服务器ecs上搭建了一个。搭建的流程和上面差不多,只是需要把ip换成公网的即可。

不过需要注意的是。由于ECS默认的ubuntu版本默认内核不支持安装docker。需要升级到3.8.0-25才可以。
升级方法:

$sudo apt-get install linux-image-3.8.0-25-generic
$sudo apt-get install linux-headers-3.8.0-25-generic

再重启

shutdown -r now

More

docker help

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值