Docker学习笔记一

docker基本概念

  • images: 镜像,简单理解就是装系统的ISO镜像,images只是binary,是“死”的,加载起来后可以运行
  • container: 容器,由镜像创建的运行实例,就和普通的linux服务一样,可以创建、start、stop、删除。但是每个容器都是彼此独立的,互相不干扰

docker安装

  • 环境: CentOS 6.x
$ sudo yum install docker-io
  • 环境: CentOS 7.x
$ sudo yum install docker
  • 环境: CentOS 5.x

目前尚未发现yum安装,网上关于docker编译安装的资料也不多

docker试用

  • 启动docker
$ sudo /etc/init.d/docker start
$ ps axu | grep docker

docker启动之后,会在后台运行一个管理所有docker镜像的进程。在centos6.x上可能会碰到启动不了docker的情况,可以看 /var/log/docker 的日志报错

/usr/bin/docker: relocation error: /usr/bin/docker: symbol dm_task_get_info_with_deferred_remove, version Base not defined in file libdevmapper.so.1.02 with link time reference

fix: $ sudo yum install device-mapper-event-libs
  • docker search镜像
$ docker search centos
NAME                                DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                              The official build of CentOS.                   941       [OK]
ansible/centos7-ansible             Ansible on Centos7                              

docker和git的使用方式很像,docker也有对应的docker hub,大家可以一起commit,docker search 的时候会去docker的公共仓库里search相应的image

  • 下载image
$ docker pull centos 
  • 查看image
$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              sshd                72e84651dfa1        7 days ago          319.9 MB

可以看到docker images可以列出本地可以加载的image

  • 加载image生成一个容器
$ docker run -t -i [REPOSITORY]:[TAG] [Command] # docker加载一个container用法
$ docker run -t -i centos:latest /bin/bash

-t 选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上
-i 则让容器的标准输入保持打开

docker 加载一个container以后,docker daem进程会分配对应container唯一的containerID

  • 查看运行container
$ docker ps
CONTAINER ID        IMAGE                   COMMAND                CREATED             STATUS              PORTS                                      NAMES
d96cd5d38467        centos:sshd             "/bin/bash"            4 seconds ago       Up 2 seconds                                                   elated_kowalevski
  • 停止某个container
$ docker stop <container id>

docker sshd 服务

下面介绍如果用docker制作一个提供sshd服务的 image。[firefoxbug]代表本机host,[docker]代表docker容器内。

  • 制作base镜像
[firefoxbug]$ yum -y install febootstrap 
[firefoxbug]$ febootstrap -i bash \
-i wget -i yum -i iputils -i iproute -i man -i vim-minimal \
-i openssh-server -i openssh-clients -i cronie-anacron -i crontabs -i rsyslog \
centos6 centos6-image http://mirrors.aliyun.com/centos/6/os/x86_64/
[firefoxbug]$ cd centos6-image && tar -c . | docker import - centos6-base
[firefoxbug]$ docker run -t -i centos6-base:latest /bin/bash

  • docker container内安装sshd服务

[docker]$ sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd [docker]$ mkdir -p /root/.ssh && chown root.root /root && chmod 700 /root/.ssh [docker]$ ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key [docker]$ ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key [docker]$ echo 'root:123456' | chpasswd [docker]$ /bin/echo -e "LANG=\"en_US.UTF-8\"" > /etc/default/local [docker]$ /usr/sbin/sshd
  • 生成镜像
[firefoxbug]$ docker commit -a firefoxbug -m 'sshd' 9f00bc3fdd22 centos:sshd

启动sshd images
[firefoxbug]$ docker run -i -t -d -p 9242:22 centos:sshd /usr/sbin/sshd -D
  • 测试
[firefoxbug]$ ssh 127.0.0.1 -p 9242

参考文章

标签:none