linux中docker的使用笔记

容器部分

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口

我这里呢,因为之前搭建带hexo编译环境中的服务与我的nginx冲突,有因为我对linux中http服务的不了解,所以想到了把编译环境搭建在虚拟化容器中办法,阿里云服务器本就是虚拟机,docker则是一个-最佳方案-。最终我选择,宝塔和编译环境 都放入容器。

运行容器

docker run --name hexo-v2 -d -it -p 172.17.0.1:2121:22/tcp -p 4000:4000 hexo-v1

–name:容器名字
hexo-v2:新建的容器名
-d :后台运行
-it:交互模式运行并分配伪终端
-p:端口映射
hexo-v1:使用的镜像名字

进入容器

docker exec -it hexo-v2 bash

现有容器存为镜像

docker commit 容器名称 镜像名称

docker镜像的导出和导入

显示当前docker中的镜像:

docker images

镜像列表如下:

REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
pointsift            latest              90b2ef439b40        2 weeks ago         12.6GB
ubuntu               18.04               735f80812f90        4 weeks ago         83.5MB

导出镜像:

docker save -o <保存路径> <镜像名称:标签>

如把A机 ubuntu:18.04 导出到当前文件夹,则在A机上运行:

docker save -o ./ubuntu18.tar ubuntu:18.04 

此时,把A机当前文件夹下的ubuntu18.tar拷贝到另一台安装过docker的B机上,在B机上导入镜像:

docker load --input ./ubuntu18.tar

这样镜像ubuntu:18.04就成功的从A机复制到B机上了

docker容器的导出与导入

显示当前docker中运行的容器:

docker ps

运行的容器列表如下:

CONTAINER ID        IMAGE               COMMAND             CREATED         STATUS              PORTS               NAMES
4a02996e83b1        ubuntu:18.04        "/bin/bash"        44 secondsago    Up 42 seconds                           ubuntu18

停止容器:

docker stop <容器名>

如要想要导出ubuntu18,必须先停止(如果ubuntu18没有运行,则不需要执行此步骤):

docker stop ubuntu18

如果容器已经停止了,想要查看该容器,可以运行(该命令会显示所有的容器,包括运行的和非运行的):

docker ps -a

导出容器:

docker export <容器名> > <保存路径>

如导在A机中导出容器ubuntu18:

docker export ubuntu18 > ./ubuntu18.tar

导入容器的命令:

docker import <文件路径>  <容器名>

把A机当前文件夹下的ubuntu18.tar文件拷贝到B机上,在B机上运行:

docker import ./ubuntu18.tar ubuntu18

启动容器:

docker start <容器名>

B机上就多了一个名为ubuntu18的容器,但导入的容器还处在未运行的状态,需要启动容器:

docker start ubuntu18

进入容器:

#同一个容器会有相同的界面,如果该容器之前已经运行过,则会直接进入运行容器的界面
#该命令通常用于进入后台已经在运行的容器

docker attach <容器名> 

或者
#同一个容器有不同的界面,进入容器后的界面不会受该容器的其他运行者的影响
#一般情况下建议使用该命令

docker exec -it <容器名> <执行指令> 

启动容器之后,需要进入容器,可以运行:

docker exec -it ubuntu18 /bin/bash

这个命令这样也可以

docker exec -it ubuntu18 bash

关于端口映射问题

目前我发现的最优方案就是把现有容器存为镜像,删除原来的容器(不然会提醒端口被占用)重新建一个,并添加好端口映射

容器开启ssh

1、下载centos7的镜像

docker pull centos

2、查看已有的镜像,将看到有个名为centos的镜像

docker images

3、基于centos镜像,创建一个名为test的容器

docker run -it –name test centos /bin/bash

4、进入容器后,升级并安装ssh服务端和客户端,服务端能让其他主机远程登录本机,客户端能让本机远程登录其他主机

yum -y update

yum -y install passwd openssl openssh-server  openssh-clients

5、创建 /var/run/sshd/目录,要不然sshd服务启动会报错

mkdir  /var/run/sshd/

6、编辑sshd的配置文件/etc/ssh/sshd_config,将其中的UsePAM yes改为UsePAM no

可以进入sshd_config文件中去修改,也可以使用命令:

sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config

7、创建公私密钥,输入命令后,直接按两次enter键确认就行了

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

8、完成上述几步后,可以开启ssh服务了

/usr/sbin/sshd -D &

此时使用命令ps -ef | grep sshd 便可以看到ssh已经开起来了

输入命令

yum -y install lsof

lsof -i:22          //如果在/etc/ssh/sshd_config文件中将端口22修改了,那么填写你修改了的端口

9、修改root密码

passwd 

然后输入设置的密码

10 测试完成

1
vi  /etc/hosts  可以查看到容器的ip

11、配置ssh无密码登录

1
2
3
4
5
ssh-keygen -t rsa

cd ~/.ssh

cat id_rsa.pub >> authorized_keys

输入完后,这时再输入命令

1
ssh localhost

发现并不用在输入命令了:)。

ssh无密码登录可用hadoop集群中master主节点无密码登录从节点。

阿里云ssh欢迎语

阿里云自带的欢迎语太丑了
于是自己找了找
路径在/etc/motd这个文件里
里面的内容改了就可以

日常懒得截图
镜像/容器部分转载自:https://www.jianshu.com/p/4e862a2a2d03
SSH部分转载自:https://blog.csdn.net/u013140345/article/details/79777311