最近工作了,好久没用更新博客了。。在工作中了解了docker这个工具。真是好用。折腾了一下,准备记录一下。那么docker是什么?引用百度的话来解释一下,Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
docker让开发的环境可以进行打包发布,甚至包括系统,你可以发布自己的镜像给大家使用。而且应用部署快速,跨平台,无论是linux还是Windows,还是mac os x 都支持。除了这些优点,还有很多…你可以慢慢去了解。。
一、 docker的安装
1、切换到root权限或者用sudo
2、升级source列表并保证https和ca证书成功安装
apt-get update
apt-get install apt-transport-https ca-certificates
3、增加新的GPG 密钥
apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
4.新增或编辑source列表里的docker.list文件
如果不存在就新增该文件
vim /etc/apt/sources.list.d/docker.list
5.按照系统版本增加entry
On Ubuntu Precise 12.04 (LTS)
deb https://apt.dockerproject.org/repo ubuntu-precise mainOn Ubuntu Trusty 14.04 (LTS)
deb https://apt.dockerproject.org/repo ubuntu-trusty mainUbuntu Wily 15.10
deb https://apt.dockerproject.org/repo ubuntu-wily mainUbuntu Xenial 16.04 (LTS)
deb https://apt.dockerproject.org/repo ubuntu-xenial main
然后再执行一下 apt-get update
6.更新操作后,删除老的repo
如果系统中存在较老版本的Docker(lxc-docker),需要删除,没有就跳过。其实在安装服务时,如果有也会提示,选择“是”即可。
apt-get purge lxc-docker
7.查看是否有正确的可用版本
apt-cache policy docker-engine
如图:
8.从14.04版本以上开始docker推荐安装linux-image-extra
apt-get install linux-image-extra-$(uname -r)
9.安装docker
apt-get update
apt-get install docker-engine
service docker start //启动docker服务
最后可以通过docker info 或者 docker version 查看安装的信息
service docker stop //停止docker服务
service docker restart //重启docker服务
二、 docker常用命令
1、检查镜像或者容器的参数,默认返回 JSON 格式
docker inspect [容器名orID]/[镜像名orID]
2、获取容器运行时的输出日志
docker logs [容器名orID]
-f 跟踪容器日志的最近更新;
-t 显示容器日志的时间戳;
–tail=”10” 仅列出最新10条容器日志。
3、查看容器目录
docker ps //查看正在运行的容器
docker ps -a //查看所有的容器,包括已经停止的
4.查看镜像目录
docker images
5、启动、杀死、停止、删除(删除容器必须先停止,再执行删除)容器
docker start [容器名orID]
docker kill [容器名orID]
docker stop [容器名orID]
docker rm [容器名orID]
6、删除镜像(需要先删除容器,再删镜像)
docker rmi [镜像名orID]
7、查看一个镜像的历史
docker history [镜像名orID]
8、启动容器
启动容器并启动bash(交互方式):
docker run -i -t [镜像名orID] /bin/bash
启动容器以后台方式运行(更通用的方式):
docker run -d -it [镜像名orID]
9、附着到容器
附着到正在运行的容器:
docker attach [容器名orID]
进入正在运行的容器内部,同时运行bash(比attach更好用):
docker exec -t -i [容器名orID] /bin/bash
10、从dockerhub检索image
docker search [镜像名]
11、拉取、下载镜像(这个速度很慢,后面会讲解代理设置)
docker pull [镜像名]
12、发布镜像
docker push <namespace>/<image name>
13、查看docker基础信息
查看docker版本:
docker version
查看docker系统的信息
docker info
14、构建docker镜像
通过commit提交改变构建镜像
docker commit [改变了的容器的ID] [REPOSITORY:TAG]
如:docker commit 6282cee20e5b anumbrella/ubuntu
当然还可以更详细一点:
docker commit -m=”add ssh” –author=”anumbrella” 6282cee20e5b anumbrella/ubuntu:ssh通过Dockerfile来构建镜像
docker build -t [REPOSITORY:TAG] -f [Dockerfile文件] [Dockerfile目录]
如: docker build -t anumbrella/ubuntu:ssh -f /docker/ubuntu/Dockerfile /docker/ubuntu
15、保存、加载docker镜像
保存镜像
docker save [OPTIONS] IMAGE [IMAGE...]
将docker的镜像打包保存下载下来。
如:
docker save -o myUbuntu.zip anumbrella/ubuntu:ssh
也可以使用
docker save anumbrella/ubuntu:ssh>myUbuntu.zip
加载镜像
docker load [OPTIONS] IMAGE [IMAGE...]
如:
docker load -i myUbuntu.zip
也可以使用
docker load < myUbuntu.zip
三、 docker下安装ubuntu以及ssh服务进行链接
经过上面的讲解,我们对docker的基本知识有了认识。接下来,我们便开始进行一个docker实例。现在假如有一个这样的需求,公司来了10个实习生,我们需要给他们10个linux服务器给他们摆弄。现在只有一台服务器可以用,当然可以linux分配账号,来实现。如果需要更彻底完善root,单个人的系统,其实可以用docker来部署。
1、安装ubuntu系统
在docker的hub仓库中,有专门的ubuntu系统。我们直接用使用就可以了。
docker search ubuntu
如图:
2、选择要拉下了的镜像
docker pull ubuntu
这里可以很很慢,因为镜像是在国外。使用镜像加速就可以了。
在/etc/docker/daemon.json 文件并添加上 registry-mirrors 键值。如果没有文件,则新建一个。键值如下:
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
重启服务: service docker restart 。
还有其他的方法,可以看官方的加速链接,链接地址。
3、下载完毕后,查看镜像:
docker images
如图:
4、运行容器
docker run --name iubuntu -t -i -d -p 3316:22 ubuntu
参数: –name 指定生成的容器的名称
-i: 以交互模式运行容器,保证容器中STDIN是开启的。通常与 -t 同时使用;
-t: 为容器重新分配一个伪tty终端,通常与 -i 同时使用;
-d: 后台运行容器,并返回容器ID;
-p:可以指定要映射的IP和端口,但是在一个指定端口上只可以绑定一个容器。支持的格式有 hostPort:containerPort、ip:hostPort:containerPort、 ip::containerPort。
ubuntu 则是镜像名称,镜像ID也可以的。
运行后查看结果如下:
5、进入容器终端安装ssh服务
docker exec -t -i [容器名orID] /bin/bash
安装ssh服务(默认为root权限用户):
先执行更新
apt-get update
安装ssh-client命令
apt-get install openssh-client
安装ssh-server命令
apt-get install openssh-server
安装完成以后,先启动服务
/etc/init.d/ssh start
启动后,可以通过“ps -e|grep ssh”查看是否正确启动。
如下图:
最后编辑sshd_config文件
vim /etc/ssh/sshd_config
将PermitRootLogin xxxx-password 改为 PermitRootLogin yes。
如果没有vim,先apt-get install vim。重启ssh服务
service ssh restart
设置ssh密码
passwd root
查看容器ip:
apt-get install net-tools
然后输入ifconfig,查看容器ip。
如图:
6、ssh链接容器中的系统
退出容器终端exit。
在宿主机中,docker ps -a 命令中可以查看到容器的端口。在宿主机中,可以使用localhost进行登录,也可以使用刚才ifconfig查看的ip进行登录。
ssh root@localhost -p 3316
如下图:
如果要从外部进行登录,就要使用宿主机的ip,端口不变。这样我们的任务就完成了。接下来,就可以自由玩耍服务器了。
如下图:
ssh root@x.x.x.x -p 3316
x.x.x.x就是宿主机的ip地址。
7、提交更改的镜像
刚刚我们对容器进行了安装,可以如果删掉话。每次都要重新执行上面的操作,所以可以对镜像进行提交保存。
docker commit [改变了的容器的ID] [REPOSITORY:TAG]
如图:
最后打包了一个Ubuntu的web服务器镜像到阿里云的hub管理平台上,包含ssh、apache、mysql等服务,大家可以去pull来学习一下。
地址:镜像