美文网首页漫话Python
容器技术docker入门

容器技术docker入门

作者: DayBreakL | 来源:发表于2019-04-19 20:33 被阅读0次

    docker是什么

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。

    docker与虚拟机

    docker与虚拟机
    • 最明显是Guest OS,docker没有虚拟化内核,使用宿主内核。
    • 虚拟机能做的,docker不一定能做,反之亦然。目前来说虚拟机可做的事情大于docker。
    • docker的特性在于轻量。如果在虚拟机中维护好几个内核,必然启动、运行速度都会很慢,但是很多场景,是不需要关注内核的,比如下载jenkins安装包,安装数据库等。这是docker轻量级、docker秒启动的原因。
    • 一台服务器可能只能挂几个虚拟机。一台服务器上可以启动上百个docker都没问题。
    • docker是怎么保证各个容器互相隔离?
      因为docker的核心技术:Namespace、联合文件系统、Cgroups帮助docker隔离不同级别的东西
      Namespace,网络名称空间,隔离网络机制,两个Namespace是网络完全隔离,无法通信的。除非通过端口映射出来。
      联合文件系统,给每个容器提供单独的视图,所以只能访问该容器中的文件,达到文件隔离。
      Cgroups,达到资源隔离,每个容器申请固定的资源。
    • 共用一个内核的缺点,如果一个容器把内核搞挂了,其他容器也挂了。但是一般不会搞挂,哈哈。

    docker下载、安装

    docker 镜像管理命令

    1. docker pull image_name [:tag]
      拉取镜像,不写tag默认最新版本latest
    2. docker push image_name
      推送镜像
    3. docker images
      查看当前机器所有镜像
    4. docker rmi image_name /image_id
      删除当前机器的一个镜像
    5. docker tag source_images_name:tag your_images_name:tag
      为一个镜像打上tag
      原本的镜像的源版本是不可修改的,只能给它打tag,增加新的版本
      docker tag jenkens:latest jenkens:5.5
      docker tag jenkens:latest myjenkens:5.5
      新增了一个版本,但是它的image_id都是一样的,说明不是新增一个镜像。
    6. docker save busybox>busybox.tar
      当前已有镜像保存: docker save jenkins>myjenkins.tar
    7. docker load < busybox.tar.gz
      本地下载好.tar包,加载镜像:docker load <jenkins.tar

    请使用http,不要用https,“No certs for egitstry.docker.com”。

    • 如何选择镜像呢?例:jenkins
      搜索栏进行搜索,第一个是官方提供的jenkins镜像:

      点击进去也会有更详细的说明文档:

      右侧也会有拉取镜像的命令:docker pull jenkins
      第一次拉取会比较慢,需要下载。

      安装完成:✅

    docker 容器管理命令

    1. docker run jenkins
      通过一个镜像启动一个容器
      docker run -p 8080:8080 -p 50000:50000 jenkins
      端口映射,就是将宿主机的8080端口映射到容器的8080端口上。通过访问宿主机的8080端口,将请求转发到容器的8080端口
    • 是否可以后台运行?默认情况,网断或者shell交互关闭,容器都会挂掉。
      docker run -d jenkins
      后台运行了,查看docker启动日志
      docker logs -f
    • 让容器使用我自己命名的名字作为容器名称
      docker run -d --name myjenkins jenkins
    1. docker ps
      列出所有正在运行的容器
    • 列出所有容器docker ps -a
    • 新增一列SIZE,代表当前容器占用的容量docker ps -a -s
    1. docker stop CONTAINER_Name
      停止容器

    2. docker rm CONTAINER_Name
      删除容器

    • 先停止再删除,麻烦!
      强制删除容器 docker rm -f CONTAINER_Name
    1. docker kill CONTAINER_Name
      杀死容器,不会等待容器结束

    2. docker run -d --name myjenkins -p 8080:8080
      前面讲了,Namespace技术,使得各个容器间网络隔离,无法通信,宿主机也无法使用,除非使用端口映射。
      端口映射,就是将宿主机的8080端口映射到容器的8080端口上。通过访问宿主机的8080端口,将请求转发到容器的8080端口
      127.0.0.1:8080可以访问jenkins
      需要初始密码,启动log docker logs -f有初始密码

    3. 数据卷(Data Volume)
      存在容器中的数据会随着容器的删除、节点有问题而丢失。这是我们不愿意看到的。希望在容器中保存的数据能够持久化出来。用数据卷可以解决这个问题。
      -v 宿主机目录:容器目录命令,把宿主机上的某个目录挂载容器上 ,容器文件目录也映射到宿主机,即使容器删除,文件也还是保存在宿主机上的。
      ps:注意挂载权限 sudo chown -R 1000:1000 /home/docker/jenkins

    4. docker info
      查看docker服务的信息

    5. docker inspect CONTAINER_Name
      查看容器元数据

    与容器交互的命令

    1. docker exec
      是在容器中去执行一条命令
    • docker exec -it jenkins bash 登录容器
      -it是启动虚拟的shell交互,shell交互去运行bash,才可以登录到容器里面
    • docker exec jenkins echo "hello world" 在容器jenkins中打印hello world
    • docker exec jenkins ping www.baidu.com在容器jenkins中ping百度
    1. ps aux|grep jenkins
      在容器中是看不到别的容器和宿主机的,但是docker留了一个口子,可以用宿主机看到容器。
    2. docker cp CONTAINER_Name:CONTAINER_PATH HOST_PATH
      把主机上的一个文件copy到容器中

    拓展

    联合文件系统:
    x空间目录有A文件,Y空间目录有B文件,通过视图可以看到所有空间的所有文件,这个视图就是联合文件系统。这个视图里就要A、B文件。
    在视图层中对A文件中加一行“hello”,同步到x空间中的A文件,在视图中对B文件中加一行“world”,在y空间并不会同步,而是在x空间记录“对B文件增加world这个字符串”,即记录对B文件的修改,原因是联合文件系统,只有链接的第一个目录有读写权限,其他目录只有读权限。
    即无法修改的是镜像层,记录镜像层的修改是容器层,可以操作的是视图层。登录容器时,就是视图层。


    把容器层叠加到镜像层,上层都是记录的对下层的修改。新的容器层继续记录对镜像层的修改。可以一直叠加。所以删除镜像时,是删除多层镜像,是一层一层删除的。

    • 为什么要使用多层镜像呢?提高复用性,节省空间。
      假设jenkin每层是这样,如果我想直接复用centos,上层装python、node.js,可以直接使用。



    制作镜像

    1. 制作镜像的命令:docker commit myjenkins myjenkins:5.5
      制作新的命名为myjenkins的镜像,tag是5.5
    2. Dockerfile文件,docker官方推荐的制作镜像的方式

    启动命令扩展

    docker run -d --name myjenkins --net host jenkins
    使用宿主机的网络启动jenkins

    相关文章

      网友评论

        本文标题:容器技术docker入门

        本文链接:https://www.haomeiwen.com/subject/boxawqtx.html