docker的安装与使用安装ssh服务
来源:互联网 发布:营销活动效果数据分析 编辑:程序博客网 时间:2024/06/11 20:11
如果你的centos操作系统内核低于3.10,需要升级到这个版本以上,才能安装docker。
第一步,先看目前的内核版本
[root@node1 ~]#uname -r
在我的系统上输出:
2.6.32-431.el6.centos.plus.x86_64
第二步,导入public key
[root@node1 ~]#rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
第三步,安装ELRepo
[root@node1 ~]#rpm -Uvh http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm
第四步,安装内核
在yum的ELRepo源中,有mainline(4.6)、long-term(3.10)这2个内核版本,考虑到long-term更稳定,会长期更新,所以选择这个版本。
查看ELRepo源中内核:http://elrepo.org/linux/kernel/el6/x86_64/RPMS/
安装命令: yum --enablerepo=elrepo-kernel install kernel-lt -y
第五步,编辑grub.conf,修改Grub引导顺序
[root@node1 ~]#vim /etc/grub.conf
确认刚安装好的内核在哪个位置,然后设置default值(从0开始),一般新安装的内核在第一个位置,所以设置default=0。
第六步,重启,查看内核版本号
[root@node1 ~]#reboot
第七步,重启后验证下系统内核版本
[root@node1 ~]# uname -r
3.10.107-1.el6.elrepo.x86_64
接下来安装docker
[root@node1 ~]# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
yum -y install docker-io
等待在线安装
然后验证是否安装成功 输出版本号即为安装成功
[root@node1 ~]# docker version
Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 786b29d/1.7.1
OS/Arch (client): linux/amd64
启动docker
service docker start
发现有错误信息,日志:
/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
运行
yum upgrade device-mapper-libs
再启动docker
service docker start
查看日志 启动成功
time="2017-07-14T10:13:37.068269901-07:00" level=info msg="Listening for HTTP on unix (/var/run/docker.sock)"
time="2017-07-14T10:13:37.094516931-07:00" level=info msg="[graphdriver] using prior storage driver \"devicemapper\""
time="2017-07-14T10:13:37.096885419-07:00" level=warning msg="Running modprobe bridge nf_nat failed with message: , error: exit status 1"
time="2017-07-14T10:13:37.178705228-07:00" level=info msg="Loading containers: start."
接下来下载一个centos7都镜像 先搜索一下
[root@node1 ~]# docker search centos
然后获取一个镜像
[root@node1 ~]# docker pull centos:7
等待下载后,查看下载的镜像
[root@node1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEcentos 7 72a210db1424 12 days ago 192.5 MB
docker run -itcentos:7 /bin/bash
执行后会进入该容器的命令行模式
[root@303c30ca276a /]#
可以在里面安装一些软件服务,比如安装ssh服务便于管理容器,
[root@303c30ca276a /]# yum install openssh-server
# 启动之前需手动创建/var/run/sshd,不然启动sshd的时候会报错
[root@303c30ca276a /]#mkdir -p /var/run/sshd
#需要修改/etc/sshd/sshd_config文件中内容
PermitRootLogin yes
UsePAM no
[root@303c30ca276a /]#vi /etc/ssh/sshd_config
#启动ssh服务 sshd以守护进程运行
[root@303c30ca276a /]#/usr/sbin/sshd -D &
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
表示/etc/ssh/下没有相关的密钥,一个个逐步生成就可以 输入命令后一路回车,
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
查看是否都生成成功
[root@303c30ca276a /]# cd /etc/ssh[root@303c30ca276a ssh]# lltotal 272-rw-r--r--. 1 root root 242153 Apr 12 14:05 moduli-rw-------. 1 root root 1675 Jul 18 11:23 ssh_host_ecdsa_key-rw-r--r--. 1 root root 399 Jul 18 11:23 ssh_host_ecdsa_key.pub-rw-------. 1 root root 1675 Jul 18 11:24 ssh_host_ed25519_key-rw-r--r--. 1 root root 399 Jul 18 11:24 ssh_host_ed25519_key.pub-rw-------. 1 root root 1675 Jul 18 11:23 ssh_host_rsa_key-rw-r--r--. 1 root root 399 Jul 18 11:23 ssh_host_rsa_key.pub-rw-------. 1 root root 4359 Jul 18 11:31 sshd_config
再启动 /usr/sbin/sshd -D &
#查看是否启动成功
[root@303c30ca276a /]# ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 13:35 ? 00:00:00 /bin/bashroot 18 1 0 14:01 ? 00:00:00 /usr/sbin/sshd -Droot 20 1 0 14:01 ? 00:00:00 ps -ef
已经有sshd的进程了,说明启动成功,
此时给我们更改下root的密码
[root@303c30ca276a /]#passwd
输入两次相同的密码
此时可以通过宿主机使用ssh登陆到此容器 我们需要知道此容器分配的ip地址,
运行ifconfig查看下ip 如果报错,
bash: ifconfig: command not found
先安装下net-tools
[root@303c30ca276a /]#yum install net-tools
在查看下 ifconfig
[root@303c30ca276a /]# ifconfigeth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.41 netmask 255.255.0.0 broadcast 0.0.0.0 inet6 fe80::42:acff:fe11:29 prefixlen 64 scopeid 0x20<link> ether 02:42:ac:11:00:29 txqueuelen 0 (Ethernet) RX packets 6 bytes 468 (468.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 7 bytes 558 (558.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
以上运行的在容器内操作的,在容器内安装的软件。
此时通过宿主机登陆新开个shell窗口
通过docker命令查看所有的容器或者正在运行的容器
docker ps -a 查看所有的容器
docker ps 查看正在运行的容器
[root@node1 ~]# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES303c30ca276a centos:7 "/bin/bash" 2 hours ago Up 12 minutes thirsty_bohr
此时一个容器id 为 303c30ca276a 正在运行 注意的是PORTS为空,表示目前没有通过宿主机端口映射到容器的服务端口
通过宿主机ssh 登陆
[root@node1 ~]#ssh root@172.17.0.40
提示输入密码
输入上面更改过的root用户密码
登陆容器成功
可以像操作平时的主机一样操作以及启动一些服务,此时只能通过宿主机上面访问ssh,下面可以把上面的启动容器打成一个镜像包。
回到容器的命令行窗口,执行exit推出,容器会自动停止。
执行更具某一个容器生成一个新的镜像,新的镜像包含容器里面安装的所有服务
docker commit <容器id> debian02 #把这个容器提交生成新的debian02镜像(该镜像是原始镜像与容器的整合)
容器id 可以通过 docker ps -a查看
[root@node1 ~]# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES303c30ca276a centos:7 "/bin/bash" 3 hours ago Exited (0) 3 minutes ago thirsty_bohr[root@node1 ~]# docker commit 303c30ca276a centos/ssh
[root@node1 ~]# docker commit 303c30ca276a centos/ssh4d4b865e0c2c5c9ff34bd66114c27b2ba12afedebf19a82e03160d0925d769bb
查看打包的镜像
docker images
root@node1 ~]# docker imagesREPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZEcentos/ssh latest 4d4b865e0c2c 33 seconds ago 302 MBcentos latest 72a210db1424 12 days ago 192.5 MBcentos 7 72a210db1424 12 days ago 192.5 MB
然后我们在容器可以执行运行这个镜像 并且以进程守护的方式启动ssh服务 宿主机的52222端口映射到容器的22端口
docker run -d -p 52222:22 <镜像id> /usr/sbin/sshd -D
[root@node1 ~]# docker run -d -p 52222:22 4d4b865e0c2c /usr/sbin/sshd -D5c78d087e84074c0d58822cf11d00c257905ea3183a2d2d7b8a5586b71a34402已经启动一个容器 运行的镜像为 刚才打包的镜像 并且已经启动 ssh服务,此时我们可以直接通过宿主机的ip以及以及映射的端口52222登陆
[root@node1 ~]# ssh root@192.168.184.134 -p 52222The authenticity of host '[192.168.184.134]:52222 ([::1]:52222)' can't be established.RSA key fingerprint is d5:9d:c6:27:8a:dc:da:f2:03:39:25:05:9b:f5:aa:55.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '[192.168.184.134]:52222' (RSA) to the list of known hosts.root@192.168.184.134's password: Last login: Tue Jul 18 11:32:33 2017 from gateway[root@5c78d087e840 ~]#
此时已经登陆到容器内了, 可以后续做一些相关操作
关于docker容器的端口映射
由于docker容器的IP地址每次启动都会变,所以不适用于手动添加端口映射(难道
每次重启都来查看容器的IP么?),所以需要每次启动容器时由docker程序自动添
加NAT规则,前期尽可能的把需要映射的端口在创建容器时配置好,如下:
docker run -h="activemq" --name activemq -d -p 51000:22 -p 51001:3306-p 51003:6379 -p 51004:6381 -p 51005:80-p 51006:8000 -p 51007:8888 debian/base/etc/rc.local
#此处我把mysql,redis,nginx,ssh都进行了映射。
后续对于docker容器的管理,记住容器的名称,如上述名称是activemq,则使用docker stop,start来控制容器进程。
docker stop activemq
docker start activemq
当然,也可以不让docker每次启动容器修改容器的IP地址,参考如下:
docker网络配置:http://www.open-open.com/lib/view/open1404896485747.html
关于docker容器的多程序开机自动运行
docker容器每次启动时,开机自启动的命令都要在启动容器前指定。如 docker run -I -t debian /bin/bash命令,只会运行/bin/bash程序,其它的程序都不会运行,对于要跑多个程序的容器特别纠结。
多程序开机自动运行方法:可把前面所说的启动命令换成dockerrun -I -t debian /etc/rc.local,在容器中把所有需要开机自的启动命令放在/etc/rc.local中,就可以达到多程序开机自启动了。
后台运行则是:docker run -d -p 50001:22 debian /etc/rc.local。注意:run命令是创建一个新的容器,如果要启动一个曾经运行过的容器,则用命令docker ps -a中找对应的容器ID,然后使用docker start <容器ID>即可。
关于docker容器和镜像的关系
无论容器里做什么操作,写文件,删文件。该容器的基本镜像都不会有任何改变。这是因为Docker从父镜像建立增量镜像,只存储每个容器的更改。因此,如果你有一个300MB的父镜像,如果你在容器中安装了50MB的额外应用或服务,你的容器只有50MB,父镜像还是300MB。但是可以使用Dockfile或commit命令来,把增量镜像和父镜像一起生成一个新的镜像。
commit使用:
docker commit <镜像id> <新镜像名称>
Dockfile使用:
root@node1:/data# cat Dockerfile
FROMubuntu/testa #这是基础镜像
CMD["/root/start.sh"] #这是启动命令
root@node1:/data# docker build -t <新镜像名> ./
docker参数详解
docker
useage of docker
-D 默认false 允许调试模式(debugmode)
-H 默认是unix:///var/run/docker.sock tcp://[host[:port]]来绑定 或者unix://[/path/to/socket]来使用(二进制文件的时候),当主机ip host=[0.0.0.0],(端口)port=[4243] 或者 path=[/var/run/docker.sock]是缺省值,做为默认值来使用
-api-enable-cors 默认flase 允许CORS header远程api
-b 默认是空,附加在已存在的网桥上,如果是用'none'参数,就禁用了容器的网络
-bip 默认是空,使用提供的CIDR(ClasslessInter-Domain Routing-无类型域间选路)标记地址动态创建网桥(dcoker0),和-b参数冲突
-d 默认false 允许进程模式(daemonmode)
-dns 默认是空,使docker使用指定的DNS服务器
-g 默认是"/var/lib/docker":作为docker使用的根路径
-icc 默认true,允许inter-container来通信
-ip 默认"0.0.0.0":绑定容器端口的默认Ip地址
-iptables 默认true 禁用docker添加iptables规则
-mtu 默认1500 : 设置容器网络传输的最大单元(mtu)
-p 默认是/var/run/docker.pid进程pid使用的文件路径
-r 默认是true 重启之前运行的容器
-s 默认是空 ,这个是docker运行是使用一个指定的存储驱动器
-v 默认false 打印版本信息和退出
docker run命令详解
Usage: docker run [OPTIONS] IMAGE[:TAG] [COMMAND] [ARG...]
Run a command in a new container
-a=map[]: 附加标准输入、输出或者错误输出
-c=0: 共享CPU格式(相对重要)
-cidfile="": 将容器的ID标识写入文件
-d=false: 分离模式,在后台运行容器,并且打印出容器ID
-e=[]:设置环境变量
-h="": 容器的主机名称
-i=false: 保持输入流开放即使没有附加输入流
-privileged=false: 给容器扩展的权限
-m="": 内存限制 (格式:<number><optional unit>, unit单位 = b, k, m or g)
-n=true: 允许镜像使用网络
-p=[]: 匹配镜像内的网络端口号
-rm=false:当容器退出时自动删除容器 (不能跟 -d一起使用)
-t=false: 分配一个伪造的终端输入
-u="": 用户名或者ID
-dns=[]: 自定义容器的DNS服务器
-v=[]: 创建一个挂载绑定:[host-dir]:[container-dir]:[rw|ro].如果容器目录丢失,docker会创建一个新的卷
-volumes-from="": 挂载容器所有的卷
-entrypoint="": 覆盖镜像设置默认的入口点
-w="": 工作目录内的容器
-lxc-conf=[]: 添加自定义-lxc-conf="lxc.cgroup.cpuset.cpus = 0,1"
-sig-proxy=true: 代理接收所有进程信号(even in non-tty mode)
-expose=[]: 让你主机没有开放的端口
-link="": 连接到另一个容器(name:alias)
-name="": 分配容器的名称,如果没有指定就会随机生成一个
-P=false: Publish all exposed ports to thehost interfaces 公布所有显示的端口主机接口
docker常用命令总结
docker pull <镜像名:tag> #从官网拉取镜像
docker search <镜像名> #搜索在线可用镜像名
查询容器、镜像、日志
docker top <container> #显示容器内运行的进程
docker images #查询所有的镜像,默认是最近创建的排在最上。
docker ps #查看正在运行的容器
docker ps -l #查看最后退出的容器的ID
docker ps -a #查看所有的容器,包括退出的。
docker logs {容器ID|容器名称} #查询某个容器的所有操作记录。
docker logs -f {容器ID|容器名称} #实时查看容易的操作记录。
删除容器与镜像
docker rm$(docker ps -a -q) #删除所有容器
docker rm <容器名or ID> #删除单个容器
docker rmi <ID> #删除单个镜像
docker rmi$(docker images | grep none | awk '{print $3}' | sort -r)
进入已经启动的容器
docker attache <容器名 or id> 进入某个容器
docker exec -it <容器名 or id> /bin/bash 进入容器并执行命令行模式
启动停止容器
docker stop <容器名or ID> #停止某个容器
docker start <容器名or ID> #启动某个容器
docker kill <容器名or ID> #杀掉某个容器
容器迁器
docker export <CONTAINER ID> > /home/export.tar #导出
cat /home/export.tar | sudo docker import - busybox-1-export:latest
# 导入export.tar文件
docker save debian> /home/save.tar #将debian容器打包
docker load< /home/save.tar #在另一台服务器上加载打包文件
save和export的对比参考地址:
http://www.fanli7.net/a/bianchengyuyan/C__/20140423/452256.html
运行一个新容器
#运行一个新容器,同时为它命名、端口映射。以debian02镜像为例
docker run -h="redis-test" --name redis-test -d -p 51000:22 -p51001:3306 -p 51003:6379 -p 51004:6381 -p 51005:80 -p 51006:8000 -p 51007:8888 debian02 /etc/rc.local
#从container中拷贝文件,当container已经关闭后,在里面的文件还可以拷贝出来。
sudo docker cp 7bb0e258aefe:/etc/debian_version . #把容器中的/etc/debian_version拷贝到当前目录下。
docker Dockfile镜像制作
root@node1:/data# cat Dockerfile
FROM ubuntu/testa #这是基础镜像
CMD ["/root/start.sh"] #这是启动命令
root@node1:/data# docker build -t <新镜像名> ./ #生成新的镜像
Dockfile更多参数参考:
http://www.tuicool.com/articles/FRvAbe
http://www.colorscode.net/2014/01/04/howto-build-image-with-automatic-startup-ssh-service-from-dockerfile/
- docker的安装与使用安装ssh服务
- ubuntu下ssh服务的安装与使用
- 【Docker学习】Docker 的安装与使用
- docker的安装与使用
- docker中centos7安装ssh服务
- ubuntu ssh服务的安装与配置
- ssh服务的安装与运行
- Docker安装与使用
- docker安装与使用
- 安装与开启SSH服务
- Ubuntu下Docker的安装与使用
- 企业中docker的使用与安装
- SSH安装与使用
- docker centos7 安装ssh
- docker centos7 安装ssh
- docker centos7 安装ssh
- docker centos7 安装ssh
- docker centos7 安装ssh
- tomcat内存配置及配置参数详解
- OCM考试实验-Skillset1----Network configuration
- 第五周 leetcode 3. Longest Substring Without Repeating Characters(Medium)
- 使用RTL-SDR和Matlab Simulink玩转软件无线电(十七)
- TensorFlow搭建RNN(1/7) 简单案例
- docker的安装与使用安装ssh服务
- VSCode下便捷编译运行C++代码——Code Runner配置及说明
- angularjs ui-select 如果select的内容为空 则禁止点击
- @JsonIgnore注解的使用
- Java把date类型转换成long
- tensorflow学习:建立一个最简单的神经网络
- Spark快速大数据分析之第二章Spark 下载与入门
- 菜鸟先飞之JAVA_数组
- ndk-build ceres solver 错误记录