docker入门学习

1、基本概念

镜像:用程序员的角度来说,就是一个类

容器:镜像的实例,等同于类的实例

仓库:保存镜像的地方,分共有和私有的区别

 

问题1:实例数据如何保存

问:如果容器是镜像的实例,那么实例运行的数据保存在什么地方

答:通过传递文件路径,实例的数据保存在宿主主机的文件系统目录中(通过docker的数据管理来与宿主主机文件系统通信),传递过程可以参考文章使用Docker搭建GitLab实践:http://www.open-open.com/lib/view/open1438009785316.html。可以通过启动带参数建立数据卷,但是如果没有容器使用的情况,生命周期会结束。

 

问题2:数据卷有什么用?

答:可以在多个容器中通过数据卷容器进行共享,可以在容器外针对数据卷进行恢复和保存,摆脱没有实例使用的时候数据发生丢失

参考:http://www.widuu.com/chinese_docker/userguide/dockervolumes.html

 

问题3:docker中的日志查看

问:如果查看日志

答:   a) docker logs  容器ID  

          b)docker logs –f  容器ID     与tail –f 到文件上一样

          c)docker logs –ft  容器ID    与tail –f 一样,并且加上时间戳

d)启动用--log-driver="syslog"加载日志驱动

参考:http://blog.youkuaiyun.com/chen_shiqiang/article/details/51438879

问题4:容器如何监控

答: docker  top 和docker stats命令,其中docker  top显示所偶的进程信息,docker stats显示cpu使用、内存使用和网络IO的使用情况

参考:

http://blog.youkuaiyun.com/chen_shiqiang/article/details/51438879  docker日志学习二

http://blog.youkuaiyun.com/rually/article/details/50651874  如何优雅的查看docker容器的日志

 

问题5:容器启动资源如何隔离

答:docker run 中的命令参数,man docker-run可以看到

介绍较详细文档:http://blog.youkuaiyun.com/horsefoot/article/details/51731543

 

问题6:docker与微服务架构关系

答:微服务构架:将用户现有的复杂系统拆分成多个微服务,每个微服务的内容用一个镜像管理。通过 Docker Compose 模板描述服务之间的依赖关系和配置。通过容器服务选择之前创建的编排模板创建应用。总体来说,docker是微服务的一个工具

 

问题7:在docker容器之间是否有负载均衡方案

答:有,新的docker 1.12.0开始支持,介绍比较详细的文档: http://www.tuicool.com/articles/QV7NvyA

 

2、docker常用命令

参考:http://wiselyman.iteye.com/blog/2114418 

 

安装docker

yum install docker #安装docker
systemctl start docker.service #启动docker
systemctl enable docker.service #docker开机启动

 

版本信息查看

docker -v #查看docker版本

docker info #查看docker具体信息

 

下载和查看资源
docker pull centos #下载centos image
docker images #显示已有image

启动和关闭系统:
docker run -i -t centos /bin/bash #启动系统
docker stop $(docker ps -a -q) #停止所有容器

 

删除相关资源:

docker rm $(docker ps -a -q) #删除所有container

docker rmi  imageid #删除image

docker rmi $(docker images -q) #删除所有image

其中,rm是删除容器,rmi是删除镜像

 

查看容器信息:

docker inspect container_name #查看容器信息

docker inspect container_name | grep IPAddress #查看当前容器ip地地址

docker attach --sig-proxy=false 304f5db405ec  (按control +c 退出不停止容器)

3、入门简单例子

查找:

[root@bogon ~]# docker search learn/tutorial
INDEX       NAME                       DESCRIPTION   STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/learn/tutorial

 

下载:

[root@bogon ~]# docker  pull learn/tutorial
Using default tag: latest
Trying to pull repository docker.io/learn/tutorial ...
latest: Pulling from docker.io/learn/tutorial
271134aeb542: Pull complete
Digest: sha256:2933b82e7c2a72ad8ea89d58af5d1472e35dacd5b7233577483f58ff8f9338bd
Status: Downloaded newer image for docker.io/learn/tutorial:latest

 

安装容器并运行hello world:

[root@bogon ~]# docker run learn/tutorial /bin/echo hello world
hello world

 

容器中安装ping:

[root@bogon ~]# docker run learn/tutorial apt-get install -y ping
Reading package lists...
Building dependency tree...
The following NEW packages will be installed:
  iputils-ping
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 56.1 kB of archives.
After this operation, 143 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu/ precise/main iputils-ping amd64 3:20101006-1ubuntu1 [56.1 kB]
debconf: delaying package configuration, since apt-utils is not installed
Fetched 56.1 kB in 3s (16.1 kB/s)
Selecting previously unselected package iputils-ping.
(Reading database ... 7545 files and directories currently installed.)
Unpacking iputils-ping (from .../iputils-ping_3%3a20101006-1ubuntu1_amd64.deb) ...
Setting up iputils-ping (3:20101006-1ubuntu1) ...

 

获得容器ID:

[root@bogon ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS                          PORTS               NAMES
5053727d639a        learn/tutorial      "apt-get install -y p"   About a minute ago   Exited (0) About a minute ago                       elated_payne

 

提交保存为新镜像

[root@bogon ~]# docker commit 5053727d639a learn/ping
sha256:78ab42b973f6b5a5005b8b52fdcd079365845bde9c599bb0c464db4facd3e848

 

运行新镜像

[root@bogon ~]# docker run learn/ping  ping www.baidu.com
PING www.a.shifen.com (220.181.111.188) 56(84) bytes of data.
64 bytes from 220.181.111.188: icmp_req=2 ttl=46 time=4.52 ms
64 bytes from 220.181.111.188: icmp_req=3 ttl=46 time=5.11 ms
64 bytes from 220.181.111.188: icmp_req=4 ttl=46 time=5.56 ms

 

查询对应的新id

[root@bogon ~]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                CREATED              STATUS                          PORTS               NAMES
7305bca157df        learn/ping          "ping www.baidu.com"   About a minute ago   Exited (0) About a minute ago                       gloomy_kowalevski

 

查看镜像:

docker inspect 7305bca157df

相关配置比较复杂,另外文章介绍。

 

发布镜像:

docker push learn/ping

 

4、docker启用一个centos

非常完美的教程,参考:

http://www.jb51.net/article/96177.htm

注意点:

1>命令docker run -d -i -t <imageID> /bin/bash 

2>#退出,但不停止容器 Ctrl+P+Q

3>安装ifconfig和ssh后,需要重新commit一个镜像

4>docker run -d -p 10022:22 herong/centos7-ssh:latest /usr/sbin/sshd -D

5>sshd无法启动,请使用生成key命令:

[root@b5926410fe60 /]# ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''  
[root@b5926410fe60 /]# ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
[root@b5926410fe60 /]# ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N '' 
 
最终结果:客户端—>宿主机--->docker启动的centos,端口为10022,ssh通过连接到宿主机的10022端口,最终到达用容器启动的centos的22端口

 

5、Docker 容器基础系统镜像打包

        因为容器本身是共享宿主操作系统内核,所以容器基础系统镜像包本身就是一个标准的 Linux rootfs + 用户自定义的工具。根据这个思路,我们就可以构建一个自己的容器基础系统镜像。
构建标准的 Linux rootfs 的方式有很多种方法,Redhat、Debian、SUSE等主流的发行版都有提供相应的工具支持。rootfs为Linux系统中的根文件系统Root FileSystem的简称。
       大概的流程如下:构建基础的 rootfs —> 配置基础系统参数 —> 部署用户自定义软件 —> 清理系统 —> 打包为容器镜像 —> 测试镜像 —> 发布仓库

       基于Ubuntu进行基础系统镜像包的制作方式见:http://www.jb51.net/article/101509.htm

 

6、常见问题

指定一个registry

docker pull [-a|--all-tags] [--help] NAME[:TAG] | [REGISTRY_HOST[:REGISTRY_PORT]/]NAME[:TAG]

比如: docker pull registry.hub.docker.com/fedora:20

 

docker如何制作镜像

commit和dockerfile方式

 

查看启动后容器版本:

a)启动,要注意使用-i -t ,并且启动完成后使用/bin/bash环境

run -i -t -p 8888:8888 -p 6006:6006 tensorflow/tensorflow  /bin/bash

b)查看linux版本信息

参考:http://jingyan.baidu.com/article/ff4116259b127c12e48237a1.html
查看linux内核版本号的三种命令:
第一种:登录linux,在终端输入 cat /proc/version
第二种:登录linux,在终端输入 uname -a   即列出linux的内核版本号
第三种:在Linux终端输入 unmae -r 即可查看linux的内核版本号

查看linux版本信息:
第一种:登录到linux服务器执行 lsb_release-a 命令,即可查看所有版本信息
第二种:登录到linux执行 cat /etc/issue  (切记cat后要空一格)

 

7、参考文档

主要参考文档:

Docker 中文教程         http://wiki.jikexueyuan.com/project/docker/

 

其他参考文档:

容器技术爱好者博客(不错的一个博客,推荐)  http://blog.youkuaiyun.com/horsefoot

GitLab搭建与维护(基于docker镜像sameersbn/docker-gitlab)  http://www.tuicool.com/articles/bYbi2mJ

How to get into a docker container?  http://stackoverflow.com/questions/30172605/how-to-get-into-a-docker-container 

csdn知识图谱   http://lib.youkuaiyun.com/base/docker/structure

10张图带你深入理解Docker容器和镜像   http://blog.youkuaiyun.com/x931100537/article/details/49633107

docker手册-中文版.pdf

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小她爹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值