docker笔记

docker必须在root权限下才能够运行,因此需要使用sudo docker,默认会打印出所有命令的帮助信息

获取image

最好指定ubuntu的tag,否则docker会下载所有版本

sudo docker pull ubuntu:14.04

查询image

sudo docker images

运行容器

使用-i(交互)和-t(终端)选项运行容器

sudo docker run -it ubuntu /bin/bash

默认用户就是root,使用passwd修改密码,安装好openssh-server,然后修改ssh的配置

mkdir /var/run/sshd
vi /etc/ssh/ssh_config

在docker的ubuntu镜像中,默认不开启root登陆。从交互式运行退出后,必须commit这个容器

sudo docker ps -l
sudo docker commit <容器id或者name> ssh_server

然后就可以使用detach模式运行容器里的sshd,必须要加sshd的-D参数,否则容器会马上退出

sudo docker run -d -p 10022:22 ssh_server /usr/sbin/sshd -D

这样就可以在host中ssh登陆到容器

ssh root@localhost -p 10022

共享主机文件夹

可以使用docker run-v参数进行主机和容器之间的文件夹映射。

-v=[]: Create a bind mount with: [host-dir]:[container-dir]:[rw|ro].

完整的命令如下:

sudo docker run -d -p 10022:22 -v ~/hadoop-share:/hadoop-share:rw ssh_server /usr/sbin/sshd -D

给容器命名

使用docker run-h选项为容器指定hostname,使用--name=<容器名称>指定容器的名称,合在一起写成Shell脚本docker-run-hadoop:

#!/bin/sh

if [ $1 ];then
    echo "Docker named hadoop$1 will run on host port $1"
    sudo docker run -d -h hadoop$1 --name=hadoop$1 -p $1:22 -v ~/hadoop-share:/hadoop-share:rw ssh_server /usr/sbin/sshd -D
else
    echo "Please set the host port"
fi

删除所有容器

同样可以写一个脚本dock-rm-all:

#!/bin/sh
echo "All docker containers will be removed"
sudo docker stop $(sudo docker ps -aq)
sudo docker rm $(sudo docker ps -aq)

目前无法有效解决的事情

在一个已经存在的Container中不通过SSH运行其他命令,类似于下面这样

sudo docker run <containe-id> CMD

在启动时指定container的固定外网IP地址,有几种方法可以部分解决,但是都不完美:1、自定义bridge。2、指定DNS服务器。