docker初学

前言

初学docker,记录下,强烈推荐这篇文章理解docker。

知识

git

用过git的同学肯定感受到通过git管理代码是多么方便,我认为git主要作用有

  1. 本地管理代码版本:提交,回退,查看修改。如果没有git,可能会整天担心,改动这里,会不会影响原本其他功能?有git,影响了,就回退吧,写代码顾虑少了很多。
  2. 远程代码版本同步:闻说,很久以前将代码部署到服务器是用ftp的,要保证服务器端代码与本地一致很麻烦…,而git,能百分比保证。
git与docker
  • git管理的是代码,在A主机写好的代码,在B主机git pull A机仓库就能得到完全一致的代码。
  • docker管理的是环境,在A机通过docker能正常运行nginx,php,mysql,通过docker,能很方便地同步到B机中。
  • Docker Hub对应 GitHub。
docker
  • 通过docker运行的服务->docker->操作系统,对通过docker运行的服务来说,操作系统是透明的,即不管是什么操作系统,我照样运行我的,docker处理了操作系统差异,提供了上层所希望的环境。

  • 获得镜像的方式:

    • 方式1:Dockerfile —生成—> 镜像images
    • 方式2:Docker pull —获取–> 镜像
  • **容器 = 镜像 + 读写层 **

  • 数据存储问题:

    • 首先,在容器里做的修改,如docker cp 文件 <container-id>://路径,当容器被删除后,修改就不存在了。要想保存修改,可以docker commit生成新镜像,下次通过新镜像docker run就能得到修改后的。

      理解1:为什么容器被删除后,修改就不存在了呢?
      通过docker info可查看到docker根目录,centos7下是/var/lib/docker/。当通过镜像生成容器,会生成/var/lib/docker/container/容器id 目录,复制过来的文件就保存在类似这些临时目录中,当容器删除了,目录不存在,修改自然不存在了。(实际复制过来的文件不是保存到/var/lib/docker/overlay2/的某个目录中去了,内部原理不理解,暂时不管了)

      理解2:docker cp 文件 ....这个操作,实际作用的是某一只读层,不能理解为cp命令是对容器操作,因为容器 = 镜像 + 读写层,镜像也有只读层!理解到这个,当看到在Dockerfile里出现COPY命令就不会觉得奇怪了。

    • 但如果面对数据库数据的修改,这么多修改,不可能每次都commit吧,此时可通过volume解决,它的作用是实现持久化存储。通过docker run -v 主机目录:容器目录-v参数作主机目录与容器目录的映射

  • docker-compose:管理多容器应用

命令

容器生命周期管理

  • create,start,run

    • docker create为 指定镜像添加了一个可读写层(Read-Write-Layer),此时容器并未运行,处于Created状态。

      • 通过pstree -a | grep docker查看,可知,未占进程。
      • 可通过-p参数指定端口映射,类似参数属于这个命令
    • docker start为容器文件系统创建了一个进程隔离空间。注意,每一个容器只能够有一个进程隔离空间。

    • docker run = docker create + docker start,类似git pull = git fetch + git merge

    docker create [-p..] <image-id>
    docker start <container-id>
    docker run [-p..] <image-id>
    
  • 停止相关

    docker stop <container-id>	## 向运行中容器发送SIGTERM信号,linux信号15
    docker kill <container-id>	## 发送SIGKILL信号,linux信号9
    docker pause <container-id>	## 利用了cgroups的特性将运行中的进程空间暂停	
    
  • 移除容器的可读写层,只能对非运行态容器执行

    docker rm <container-id>	
    

容器操作

  • 列出docker容器

    docker ps	## 列出运行中容器
    docker ps -a	## 列出所有容器
    
  • 获取容器/镜像的元数据。

    docker inspect <image-id/container-id>
    

本地镜像管理

  • 列出所有顶层(top-level)镜像。顶层镜像:创建容器时使用的镜像或直接pull下来的镜像

    docker images
    
  • 列出所有镜像,即列出所有可读层

    docker images -a
    
  • 移除镜像的一个可读写层

    docker rmi <image-id>	## 只能移除顶层
    -f <image-id>	## 强制删除中间层
    
  • 根据Dockerfile生成本地镜像

    docker build -t 标签 Dockerfile所在目录(上下文)
    docker build -t hello_docker .
    

容器rootfs命令

  • 容器与主机间数据拷贝

    docker cp 主机目录/文件 <container-id>://目录
    docker cp index.html 6d61b7cf92c5://usr/share/nginx/html
    
  • 将容器的可读可写层转换为只读层

    docker commit -m "提交信息" <container-id> [tag]
    

镜像仓库

  • 从Docker Hub中查看镜像

    docker search php
    
  • 从镜像仓库中拉取或者更新指定镜像

    docker pull php
    
  • 登录

    docker login
    
  • 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库

    docker push 镜像
    

info相关

docker info
docker version
docker <命令> --help	查看指定命令的介绍和参数

Dockerfile

这东西涉及很多~,简单理解,Dockerfile被用了生成镜像,Dockerfile里的每一行都是所生成镜像里的一层

两个简单例子(引用自慕课docker教程,链接在此

  • 生成输出hello docker的镜像,Dockerfile内容如下:

    # 引入基础镜像,alpine是极小的linux环境,即生成的镜像会非常小
    FROM alpine:latest
    # 镜像作者
    MAINTAINER kbellx
    # 命令
    CMD echo "Hello Docker"
    
  • 生成带有nginx服务器的镜像

    # 引入ubuntu镜像
    FROM ubuntu
    MAINTAINER kbellx
    # 在ubuntu环境下,镜像环境,非主机环境
    RUN apt-get update
    # 安装nginx
    RUN apt-get install -y nginx
    # 复制Dockerfile同级目录下index.html文件到镜像目录
    COPY index.html /var/www/html
    # 指明docker run 镜像,所执行的命令的路径,参数等
    ENTRYPOINT ["/usr/sbin/nginx", "-g", "daemon off;"]
    # 暴露镜像80端口
    EXPOSE 80
    

相关链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值