标签:jpeg car 生产 kconfig run 开发 功能 就是 top n
Build,Ship and Anywhere
理解上图:搭载Docker的主机,通过Docker Client使用
docker build
docker pull
docker run
让Docker Daemon从Docker Registry拉取Ubuntu,redis,nginx等镜像,然后通过这些镜像创建不同的容器
以CentOs为例:可以参考https://docs.docker.com/install/linux/docker-ce/centos/
https://yq.aliyun.com/articles/110806?spm=5176.8351553.0.0.2206199170TjX9
安装辅助工具:
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-utils:管理repository及扩展包的工具 (主要是针对repository)
device-mapper-persistent-data:Device Mapper支持Linux上的许多高级卷管理技术;
lvm2:逻辑卷管理工具;
添加软件源信息,这里使用Docker CE版本
从2017年3月开始docker在原来的基础上分为两个分支版本: Docker CE 和 Docker EE。Docker CE 即社区免费版,Docker EE 即企业版,强调安全,但需付费使用。
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum缓存:yum makecache fast
移除旧的版本
yum remove docker
安装
yum -y install docker-ce
启动
systemctl start docker
或者
#服务方式启动
service docker start
#设置开机启动
chkconfig docker on
测试运行hello-world
docker run hello-world
卸载:yum remove docker-ce
rm -rf /var/lib/docker
问题:
解决方案
yum clean all
yum install docker-ce
docker version
docker images
docker image ls
docker ps
docker pull image-name
docker run image-name
docker ps -a
docker container ps
docker container ps -a
docker image的体积小,ubuntu-100M+,小就意味着传输与分享方便
docker run 启动的耗时为0.
docker 占用资源少
想象一下如下场景把一个项目build成一个image,然后方便分发出去,别人拿到后也不用关心你的项目需要什么环境或者依赖,只要docker run一下就能运行。。而且速度很快,甚至在一台开发机都可以管理成百上千的container,没有业务处理的时候也不会占用你的系统资源。。。
docker运用linux的技术走了捷径,不虚拟化任何硬件,而是对硬件资源在不同的容器中做了隔离,隔离使米格容器之间拥有了不同的环境(硬盘空间-网路-系统工具包),然后又可以共享需要的硬件资源(cpu-内存-系统内核),dokcer用的技术很多(如上),一项一项研究基本不可能,这也不是我们学习docker的目的,我们是让docker用于实际生产过程中,至于原理,了解即可,所以我们应该docker是怎么就能办到?
AUFS -> Another Union File System
:AUFS的技术可以让多个文件目录union成一个新的目录,并且可以对这个新的目录进行读写操作。
? 如果你有一张只读的cd数据盘,但是你却想编辑里面的内容,你通常的做法是不是把内容拷贝到本地硬盘,然后再编辑。
? 但如果你可以利用AUFS技术,你就可以将硬盘中的一个空目录和你的cd数据盘进行union形成一个新的目录,接着你对这个目录读取,会得到的cd盘内的数据,当你对这个目录的内容进行编辑,编辑的内容AUFS会自动讲修改内容保存在你union的那个空目录内,当你再次读取的时候,AUFS也会将你硬盘中记录的改动内容优先于CD数据盘中的内容读取出来,这样对用户而言,这就完全是一个可编辑的目录内容了。——docker要的就是这个效果
- 想象一下docker的Image,其实也就是一个事先制作好的只读的文件目录,当我们要使用这个系统功能的时候,docker为我们开辟了一个新的文件夹和这个image做了union,提供给docker container做为系统运行的存储;
- 这个image里面已经包含了系统程序、工具软件、以及程序,当系统启动后产生的运行时文件(如logs、临时目录等)或新安装的软件都在这个新的文件夹内。
- 这样我们在启动一个container的时候,其实并没有加载镜像的过程,也不会像虚拟机一样需要安装一个系统这么负责,只是做了一次unoin,一切就和安装过系统的虚拟机同样使用了。
- 另外docker还提供了一个
docker commit
命令,这个命令可以随时将你现在的运行中的cantainer构建成一个新的image。
docker ps -a
docker commit container-id
由于众所周知的原因,使用docker pull
,命令下载镜像太慢了,默认是从国外的。
https://help.aliyun.com/document_detail/60743.html?spm=a2c4g.11186623.6.550.764e11be5adPKN
#阿里云镜像服务
https://help.aliyun.com/document_detail/60743.html?spm=a2c4g.11186623.6.550.764e11be5adPKN
#密码
在阿里云容器镜像服务控制台-默认实例-访问凭证取 修改即可
#镜像加速器可以提升docker官方镜像的速度
在阿里云容器镜像服务控制台-镜像中心-镜像加速器
以nginx官方镜像为例https://hub.docker.com/_/nginx
docker pull nginx
docker image ls
docker image inspect nginx
一个镜像可以跑多个容器
docker run --name nginx-test -d -p 8082:80 nginx
nginx-test
容器名称,独一无二,不能重复
-d
后台运行
-p
指定端口,宿主端口:容器内部端口
-p 80
随机映射一个宿主机端口,通过docker port nginx-test
-p ip::containerport
容器端口映射主机指定ip动态端口
-p ip:hostport:containerport
-P
暴露所有(容器开发的所有)端口
nginx
镜像名称,nginx:tag
,其中nginx
默认nginx:latest
,是简写,其他版本,就需要nginx:版本号
宿主机ip:192.168.1.105
docker container ps
docker ps
docker container ps -a
docker ps -a
docker container inspect nginx-test
容器中必须运行有运行的程序,否则docker会把容器进程杀死,nginx是运行,如果只是一个linux系统的容器,会执行失败
docker container exec -it nginx-test /bin/bash
来吧,你可以在容器,为所欲为之为所欲为。
exit
#停止容器
docker stop nginx-test
#删除容器
docker rm nginx-test
#强制删除容器
docker rm -f nginx-test
#Mounts节点
docker container inspect nginx-test
#容器中无Mounts节点,mysql有,nginx没有
#自主挂载
#1.创建一个文件
mkdir -p /docker-mount/nginx/conf
#2.查看容器文件的路径
cd /etc/nginx/conf.d/
more default.conf
#没错!,文件路径/etc/nginx/conf.d/default.conf
#2.把docker的文件挂载到宿主机上
docker cp nginx-test:/etc/nginx/conf.d/default.conf /docker-mount/nginx/conf
#3.宿主机查看文件
more docker-mount/nginx/conf/default.conf
#4.编辑文件
vim docker-mount/nginx/conf/default.conf
#5.挂载至容器
docker run --name nginx-test -d -p 8080:80 -v docker-mount/nginx/conf/default.conf:/etc/nginx/conf.d/default.conf
docker logs nginx-test
#配置容器的主机名
docker run --name t1 --network bridge -h [自定义主机名] -it --rm busybox
#自定义DNS
docker run --name t1 --network bridge --dns 114.114 -it --rm busybox
#给host文件添加一条
docker run --name t1 --network bridge --add-host [hostname]:[ip] -it --rm busybox
与宿主机一模一样 不需要端口映射
不使用网络
一个容器共享另外一个容器的network namespace,与host模式差不多,只是这里不是使用宿主机网络,而是使用的容器网络
vim /etc/docker/daemon.json
核心选项为bip,即bridge ip,用于指定docker0桥自身的ip地址;其他选项可以通过此地址计算出
docker run ..
为所欲为
docker commit -a="作者" 容器名称 新镜像名称
构建docker镜像的源码
文本文档
docker build 自动执行命令行,自动构建docker镜像
指令(不区分大小写),约定大写,参数小写
顺序执行
start
#FROM 基础镜像
FROM image-name:tag
LABEL author=carfield
#ADD 可以从网络上下载
ADD source-file dest-file
ADD URL 容器目录
#COPY 可以不用 与 ADD类似
COPY 宿主机文件 容器文件
#EXPOSE 暴露端口
EXPOSE 80/tcp
#ENTRYPOINT 容器内部生效
ENTRYPOINT ["<executable>","<param1>","<param2>"]
#ENV 环境变量 key=value
ENV PATH
#ARG 同ENV
#RUN 指定docker build过程中运行命令
RUN <command>
#WORKDIR 工作目录 执行目录
WORKDIR $
#ONBUILD 触发器:被作为基础镜像触发
ONBUILD
#CMD 容器启动生效
CMD [""]
docker build -t image-name:tags .
点.
当前目录#test
FROM centos
#镜像作者 元数据标签
LABEL author=carfield
#复制文件到镜像
ADD ... ...
ADD ... ...
#配置环境变量
ENV DOTNET 路径
#WORKDIR
WORKDIR ...
RUN yum -y install vim
VOLUME ["/data1"]
EXPOSE 8080
CMD ls
ENTRYPOINT ....
# 登录docker仓库
sudo docker login --username=[用户名] registry.cn-hangzhou.aliyuncs.com
# 创建指定镜像的tag,归入某个仓库
sudo docker tag [镜像id] registry.cn-hangzhou.aliyuncs.com/xxxx/xxx:[镜像版本号]
# 镜像推送至仓库
sudo docker push registry.cn-hangzhou.aliyuncs.com/xxxx/xxx:[镜像版本号]
docker pull registry.cn-hangzhou.aliyuncs.com/xxxx/xxx:v1
标签:jpeg car 生产 kconfig run 开发 功能 就是 top n
原文地址:https://www.cnblogs.com/RandyField/p/12289668.html