docker & docker-compose精华

一、基础

1、泛谈

(1)概念:基于 Go语言的容器虚拟化技术,打造构建、运输、处处运行三部曲

(2)对比虚拟机

  • docker软件就如同 pc的虚拟机软件比如vmware(逻辑上,技术实现上则不是),镜像就如vmware装系统的时候的iso文件,容器就如每个配置的虚拟计算机,同一个iso我们可以创建多个虚拟机,就跟docker镜像可以启动多个容器一样,然后在每个虚拟计算机里我们可以装各种需要的软件,docker容器也一样,可以装各种软件。
  • docker 直接用的物理机硬件资源和操作系统,比传统虚拟机效率更高,并且镜像更小。

(2)优势

  • 启动快
  • 资源占用少
  • 体积小

(3)核心架构

  • 镜像Images:镜像是容器的模板,类似面向对象的类
  • 容器Container:独立运行的应用,基于镜像创建,类似面向对象中的对象
  • 仓库Registry:保存镜像的地方,类似github

二、镜像

1、原理

  • 联合文件系统 unionFS:底层是 bootfs内核,上面是 rootfs标准目录文件。
  • 分层:分层是为了共享底层,而不用每个镜像都需要下载所有层。

三、DockerFile

1、简介:docker镜像的构建文件,包含了一堆命令和参数的脚本

2、使用:①写好 dockerfile文件,②docker build,③docker run

3、常用指令

  • FROM:基础镜像,当前新镜像是基于哪个镜像的
  • MAINTAINER:镜像维护者的姓名和邮箱地址
  • RUN:容器构建时需要运行的命令
  • EXPOSE:当前容器对外暴露出的端口
  • WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
  • ENV:用来在构建镜像过程中设置环境变量
  • ADD:将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
  • COPY:类似ADD,拷贝文件和目录到镜像中,将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
  • VOLUME:容器数据卷,用于数据保存和持久化工作
  • CMD:指定一个容器启动时要运行的命令,可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
  • ENTRYPOINT :指定一个容器启动时要运行的命令,ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数
  • ONBUILD:当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

4、例子

FROM         centos
MAINTAINER    zzyy<zzyybs@126.com>
#把宿主机当前上下文的c.txt拷贝到容器/usr/local/路径下
COPY c.txt /usr/local/cincontainer.txt
#把java与tomcat添加到容器中
ADD jdk-8u171-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-9.0.8.tar.gz /usr/local/
#安装vim编辑器
RUN yum -y install vim
#设置工作访问时候的WORKDIR路径,登录落脚点
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置java与tomcat环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_171
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.8
ENV CATALINA_BASE /usr/local/apache-tomcat-9.0.8
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
#容器运行时监听的端口
EXPOSE  8080
#启动时运行tomcat
# ENTRYPOINT ["/usr/local/apache-tomcat-9.0.8/bin/startup.sh" ]
# CMD ["/usr/local/apache-tomcat-9.0.8/bin/catalina.sh","run"]
CMD /usr/local/apache-tomcat-9.0.8/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.8/bin/logs/catalina.out

四、常用命令

0、docker

  • 看docker信息:docker info
  • 查看帮助:docker --help(类似 linux中的 man)

1、镜像

  • 查找仓库镜像:docker search <image>
  • 拉取仓库镜像:docker pull <image>(默认是latest,有时中间卡住,取消重来就好)
  • 查看本地镜像:docker images
  • 删除本地镜像:docker rmi <image>:latest (有容器会删除不了,可-f强制删除,但容器还会在)
  • 给镜像打新标签:docker tag <image>:<tag> <newimage>:<newtag>
  • 把容器打成镜像:docker commit -a <author> <contain> <image>:<tag>
  • 查看镜像变更历史:docker history <image>

2、容器

  • 退出不停止容器:Ctrl+P+Q(exit 会停止容器)
  • 查询容器:docker ps -ef|grep <name>(ps -a 查看所有实例,ps 只看运行中实例)
  • 运行容器:docker run -d id(-d是后台运行,-v <main_location>:<contain_location> 是映射主机和容器文件夹,-p <m_p>:<c_p> 是映射主机和容器端口)
  • 停止容器:docker stop id(kill 是强制)
  • 启动容器:docker start id
  • 删除容器:docker rm id
  • 日志:docker logs id
  • 复制数据:docker cp id:containsrc mainsrc 如(docker cp 13a2c8bfa9e6:/logs /mnt/20200111),反之则调换一下位置即可
  • 查看容器内部运行进程:docker top id
  • 查看容器详细配置:docker inspect id
  • 容器内查看系统版本:cat /etc/issue

3、容器连接

  • 进入容器:docker attach id (使用该命令有一个问题。当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作)
  • 进入容器第二个方式:docker exec -it id /bin/bash (docker1.3后)

五、centos安装docker

1、安装(要求centos7以上,64位,内核3.10以上)

系统工具(可忽略):sudo yum install -y yum-utils device-mapper-persistent-data lvm2
安装:sudo yum install docker
启动服务:sudo systemctl start docker

注:启动时可能遇到失败,有可能是因为Selinux的影响,关闭它(setenforce 0),如果还失败,则可能是linux 内核不支持,先删除docker(yum remove docker-*),最好重启一下机器,更新内核(yum update),管理员身份安装docker(sudo yum install docker),再次启动(systemctl start docker),查看状态是否正常(systemctl status docker)

2、修改加速器为国内

官方:https://hub.docker.com
中国官方:http://registry.docker-cn.com/
国内网易:http://hub-mirror.c.163.com

编辑文件:vi /etc/docker/daemon.json (如果没有该文件则创建一个)
添加内容:{"registry-mirrors": ["http://registry.docker-cn.com","http://hub-mirror.c.163.com"]}
让其生效:sudo systemctl daemon-reload
重启docker:sudo systemctl restart docker
查看docker配置:docker info

  

六、docker-compose

1、用途:解决同时管理多个容器的工具

2、docker-compose常用命令

  • build:构建服务
  • ps:查询容器
  • kill:停止容器
  • logs:查看日志
  • port:查看绑定的端口,
  • pull:拉取镜像
  • run :服务执行命令
  • rm:删除容器
  • start:启动容器
  • stop:停止容器
  • up:构建、重新创建、启动连接服务的容器,启动所有连接的服务
  • scale:设置服务运行容器的个数
  • help:查看命令帮助文档

3、docker-compose.yml 常用指令

  • image:指定镜像,如果本地没有会自动pull
  • build:指定Dockerfile文件的路径,一个路径或者对象
  • command:覆盖容器启动后执行的命令
  • ports:对外端口
  • expose:暴露端口给服务
  • links
  • external_links
  • volumes:mainsrc:containsrc(主机路径:容器路径),可以绝对路径或者相对路径
  • volumes_from
  • environment
  • env_file
  • extends
  • net
  • dns
  • dns_search

4、例子

  • 增加docker-compose.yml文件,以我的一个项目,所在目录是project,结构如下

  • 编写docker-compose.yml,前面的project可自定义
project:
    build: ./project
    ports:
    - "8080:8080"
    expose:
    - 8080
  • cd到docker-compose.yml 所在目录,执行指令
docker-compose up
  • 看到成功构建,并运行,本地镜像库也看到多了一个刚构建的镜像

  

  

5、安装 docker-compose

// 下载安装到 /usr/local/bin/,并添加权限,完成后查看版本(docker-compose --version)
curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

// 安装自动补全工具
curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose	

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值