背景
docker到底是什么?是一个操作系统吗?为什么可以直接在docker中部署mysql服务,还可以在其中部署centos等操作系统?
docker中的操作系统和独立的centos操作系统有什么不同。宿主机的权限和docker内部的权限有什么区别。等等带着问题,我先开始第一个实验:在docker中部署centos.
部署
1 部署centos镜像并启动容器
1.1 获取镜像
获取镜像
docker pull centos
查看镜像
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 9f38484d220f 7 weeks ago 202MB
1.2启动镜像
docker run --privileged -itd -p 8888:22 --name centos7 9f38484d220f /usr/sbin/init
----privileged 启动后让docker容器具备超级特权。
-itd 交互式、终端、后台运行
-p 把宿主机的8888端口映射到docker的22端口。
※宿主机就是运行docker的机器,这样访问宿主机IP:8888端口,实际访问的是docker的22端口。
--name 给启动的容器命名,方便后续操作
9f38484d220f 就是IMAGE ID
注:--privileged 和/usr/sbin/init是必须的,否则会报错。
Failed to get D-Bus connection: Operation not permitted
1.3 进入镜像并配置ssh服务
进入容器
docker exec -it centos7 /bin/bash
----------------------一下都是在容器内部操作--------------------------
#安装openssh
yum install -y openssh-server openssh-clients
#启动openssh
systemctl start sshd
#设置root密码
passwd
。。。。1次密码
。。。。2次确认
#退出容器
exit
1.4 登录测试
1.3退出后进入宿主机,通过下面命令ssh连接8888端口,实际就是docker的22端口。提示输入密码后,进入docker环境内部
ssh localhost -p 8888
思考
ssh 设定后,docker环境是否必须通过密码登录呢?
答案:不是必须通过密码登录,密码只是为了远程ssh连接docker时,使用账号密码登录。
而宿主机root用户仍然可以直接通过下面命令登录
docker exec -it centos7 /bin/bash
我们不能把代码放到docker里面作为代码保护的手段,因为docker设计本身并不是出于保护内部数据的目的。