精华内容
下载资源
问答
  • title: Docker 添加容器SSH服务(4) date: 2018-12-15 20:26:12 tags: Docker categories: Docker copyright: true --- Docker是基于Go语言实现的开源容器项目,Docker让开发者可以打包他们的应用以及依赖包到一个可...

    title: Docker 添加容器SSH服务(4)
    date: 2018-12-15 20:26:12
    tags:

    • Docker
      categories: Docker
      copyright: true
      ---

    Docker是基于Go语言实现的开源容器项目,Docker让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口,Docker诞生于2013年年初,最初发起者是dotCloud公司.Docker自开源后受到广泛的关注和讨论,目前已有多个相关项目(包括Docker三剑客、Kubernetes等),逐渐形成了围绕Docker容器的生态体系,由于Docker在业界造成的影响力实在太大,dotCloud公司后来也直接改名为Docker Inc,并专注于Docker相关技术和产品的开发.


    很多时候我们需要登陆到容器内部操作,此时我们就需要开启容器的SSH支持了,下面的小例子将具体介绍三种分配IP地址的方法,分别是pipworl分配,commit分配,Docker分配等.

    基于commit命令创建

    Docker提供了commit命令,支持用户提交自己对定制容器的修改,并生成新的镜像.这里将介绍如何用docker commit命令,添加SSH服务的操作流程,首先默认情况下ssh服务在镜像里是没有被安装的,我们需要手动配置一下,后期生成镜像启动就方便啦.

    1.首先我们先来使用Centos镜像,放入后台并进入容器内部.

    [root@localhost ~]# docker pull centos:latest
    [root@localhost ~]# docker run -itd --name my_ssh --net=host centos:latest
    [root@localhost ~]# docker exec -it my_ssh /bin/bash
    [root@c59a63bbb /]# yum install -y passwd openssh openssh-server

    2.如果需要正常启动SSH服务,则目录/var/run/sshd必须存在,手动创建它,并启动SSH服务.

    [root@c59a63bbb /]# mkdir -p /var/run/sshd
    [root@c59a63bbb /]# /usr/sbin/sshd -D &

    上面的启动命令会报错,这个错误解决方案是,执行下面命令,创建这些文件.

    [root@c59a63bbb /]# ssh-keygen -q -t rsa -b 2048 -f /etc/ssh/ssh_host_rsa_key -N ''
    [root@c59a63bbb /]# ssh-keygen -q -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N ''
    [root@c59a63bbb /]# ssh-keygen -t dsa -f /etc/ssh/ssh_host_ed25519_key -N ''

    3.然后,修改/etc/ssh/sshd_config配置信息UsePAM yes改为UsePAM no,UsePrivilegeSeparation sandbox改为UsePrivilegeSeparation no,可以用vim修改,也可以用下面命令.

    [root@c59a63bbb /]# sed -i "s/#UsePrivilegeSeparation.*/UsePrivilegeSeparation no/g" /etc/ssh/sshd_config
    [root@c59a63bbb /]# sed -i "s/UsePAM.*/UsePAM no/g" /etc/ssh/sshd_config  不通过pam验证
    
    [root@c59a63bbb /]# sed -ri 's/session required pam_loginuid.so/#session
    required pam_loginuid.so/g' /etc/pam.d/sshd

    4.修改完后,重新启动sshd服务,并修改一个root密码.

    [root@c59a63bbb /]# /usr/sbin/sshd -D
    [root@c59a63bbb /]# echo "root" | passwd --stdin root
    [root@c59a63bbb /]# echo "/usr/sbin/sshd -D &" >> /etc/profile

    5.创建一个自启动脚本文件,写入一下内容.

    [root@c59a63bbb /]# vi /run.sh
    #!/bin/bash
    /usr/sbin/sshd -D
    
    [root@c59a63bbb /]# chmod +x run.sh
    [root@c59a63bbb /]# exit

    6.保存镜像,将所退出的容器用commit命令保存为一个新的my_ssh:centos镜像.

    [root@localhost ~]# docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS
    e1fc02dfd24f        centos:latest       "/bin/bash"         4 minutes ago       Up 4 minutes
    
    [root@localhost ~]# docker commit e1fc my_ssh:centos
    sha256:48997373aee923ee9b6af833de4aa9842dd090c7fee1f2569aa187e66b96231c
    
    [root@localhost ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    myssh               centos              48997373aee9        25 seconds ago      280MB
    centos              latest              1e1148e4cc2c        10 days ago         202MB
    hello-world         latest              4ab4c602aa5e        3 months ago        1.84kB

    7.启动容器,并添加端口映射10000-->22.其中10000是宿主主机的端口,22是容器的SSH服务监听端口.

    [root@localhost ~]# docker run -itd -p 10000:22 my_ssh:centos
    [root@localhost ~]# docker run -p 10000:22 -itd my_ssh:centos /run.sh
    
    b0b073cf4bf933b291f0e0139220d09325e7dead7a1a77cacc243516c09ee931

    8.在宿主主机或其他主机上上,可以通过SSH访问10022端口来登录容器.

    [root@localhost ~]# ssh root@192.168.1.5 -P 10000


    使用Dockerfile创建

    上面的方式比较复杂,接下来我们来看一个简单的,使用dockerfile的方式来创建一个Ubuntu镜像.

    1.首先,拉取一个基本镜像,并创建一个sshd_ubuntu工作目录.

    [root@localhost ~]# docker pull ubuntu:latest
    
    [root@localhost ~]# mkdir ssh_ubuntu
    [root@localhost ~]# cd ssh_ubuntu/
    [root@localhost ssh_ubuntu]# touch Dockerfile
    [root@localhost ssh_ubuntu]# touch run.sh

    2.编写run.sh以及,在宿主主机上生成SSH密钥对,并创建authorized_keys文件.

    [root@localhost ssh_ubuntu]# vim run.sh
    #!/bin/bash
    /usr/sbin/sshd -D
    
    [root@localhost ssh_ubuntu]# ssh-keygen -t rsa
    [root@localhost ssh_ubuntu]# cat ~/.ssh/id_rsa.pub >authorized_keys
    [root@localhost ssh_ubuntu]# cp -a authorized_keys /root/.ssh/

    3.下面是Dockerfile的内容,这和commit命令创建镜像过程,所进行的操作基本一致.

    #设置继承镜像
    FROM ubuntu:latest
    #提供一些作者的信息
    MAINTAINER docker_user (user@docker.com)
    #下面开始运行更新命令
    #RUN apt-get update
    #安装ssh服务
    RUN apt-get install -y passwd openssh openssh-server
    RUN mkdir -p /var/run/sshd
    RUN mkdir -p /root/.ssh
    #取消pam限制
    RUN sed -ri 's/session required pam_loginuid.so/#session required pam_loginuid.so/g' /etc/pam.d/sshd
    #复制配置文件到相应位置,并赋予脚本可执行权限
    ADD authorized_keys /root/.ssh/authorized_keys
    ADD run.sh /run.sh
    RUN chmod 755 /run.sh
    #开放端口
    EXPOSE 22
    #设置初始密码
    RUN echo "root"|passwd --stdin root
    #设置自启动命令
    CMD ["/run.sh"]

    4.创建镜像,在sshd_ubuntu目录下,使用build命令来创建镜像.这里需要注意最后还有一个".",表示使用当前目录中的Dockerfile

    [root@localhost ~]# cd sshd_ubuntu
    [root@localhost ssh_ubuntu]# docker build -t sshd:Dockerfile .

    5.测试镜像,运行容器,并通过ssh连接一下.

    [root@localhost ~]# docker run -d -p 10122:22 sshd:Dockerfile
    890c04ff8d769b604386ba4475253ae8c21fc92d60083759afa77573bf4e8af1
    [root@localhost ~]# ssh 192.168.1.200 -p 10122

    在Docker社区中,对于是否需要为Docker容器启用SSH服务一直有争论,反对方的观点是:Docker的理念是一个容器只运行一个服务.因此,如果每个容器都运行一个额外的SSH服务,就违背了这个理念.另外认为根本没有从远程主机进入容器进行维护的必要.

    使用pipwork分配

    1.安装Git工具,并克隆pipwork,放入可执行目录,并给予相应的权限.

    [root@localhost ~]# yum install -y git
    [root@localhost ~]# git clone https://github.com/jpetazzo/pipework
    
    [root@localhost ~]# cd pipework/
    [root@localhost pipework]# cp -a pipework /usr/local/bin/
    [root@localhost pipework]# chmod +x /usr/local/bin/pipework

    2.将本机配置成网桥,使之能够互相通信.

    [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens32
    [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens32
    DEVICE=eno16777728
    TYPE=Ethernet
    BOOTPROTO=static
    BRIDGE=br0
    NM_CONTROLLED=yes
    ONBOOT=yes
    
    [root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-br0
    [root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-br0
    TYPE=Bridge
    DEVICE=br0
    BOOTPROTO=static
    IPADDR=192.168.1.13
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    DNS1=8.8.8.8
    DNS2=114.114.114.114
    ONBOOT=yes
    
    [root@localhost ~]# reboot

    3.下载一个Centos镜像,并运行且指定--net="none",后期使用pipwork分配IP地址.

    [root@localhost ~]# docker pull centos:latest
    
    [root@localhost ~]# docker run -d --name my_ssh --restart=always --net="none" centos:latest
    cf8354804431a7830a6a46999ac20240ad6402d505d3130789fdc4bbb227e4e3

    4.通过命令分配IP地址,与子网掩码.

    [root@localhost ~]# pipework br0 镜像名称 192.168.1.100/24
    
    [root@localhost ~]# docker inspect my_ssh |grep "IPAddress"
                "SecondaryIPAddresses": null,
                "IPAddress": "192.168.1.100/24",
                        "IPAddress": "192.168.1.100/24",


    转载于:https://www.cnblogs.com/LyShark/p/10872328.html

    展开全文
  • 使用 Alpine Linux 发行版的 Docker 镜像容器。 仅仅适用于没有安装uclibc的系统。 修改步骤 进入容器命令行 # docker exec -it container_name /bin/sh 安装 timezone 数据包 # apk add -U ...

    适用对象

    • 使用 Alpine Linux 发行版的 Docker 镜像容器。
    • 仅仅适用于没有安装uclibc的系统。

    修改步骤

    • 进入容器命令行

      # docker exec -it container_name /bin/sh
      
    • 安装 timezone 数据包

      # apk add -U tzdata
      # ls /usr/share/zoneinfo
      

      为了防止添加失败,加上-U参数,更新仓储缓存。
      列出安装的时区文件,验证是否下载成功。

    • 拷贝需要的时区文件到localtime,国内需要的是Asia/Shanghai

      # cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
      
    • 验证时区

       # date
       Tue Jan  9 22:53:46 CST 2018
      

      CST 即为 中国标准时间

    • 移除时区文件:

      # apk del tzdata
      

      为了保证容器的精简和轻量,移除下载的时区文件。

    参考资料:

    https://wiki.alpinelinux.org/wiki/Setting_the_timezone

    其他办法:

    如果宿主机的时区是希望使用的时区,那么也可以用一个简单的办法来解决容器时区的问题。
    启动容器的时候,可以映射宿主机的本地时区文件,

    • 例如:

      # docker run -it --name sample_alphine -v /etc/localtime:/etc/localtime -d alphine:lastest
      

     

     

    展开全文
  • 修改容器映射端口出错,重启容器通过“-p 端口:端口”命令添加端口映射后,提示重启失败:“docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process ...

    最近因为公司业务,开始了解关于docker的使用,在保存一个新的镜像,运行该镜像容器后,发现不能再修改映射的端口号

    修改容器映射端口出错,重启容器通过“-p 端口:端口”命令添加端口映射后,提示重启失败:“docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused “exec: “-p”: executable file not found in $PATH”: unknown.
    ERRO[0000] error waiting for container: context canceled”


    后面查找资料后才明白,运行后的容器不能再通过“-p 端口:端口”参数来修改映射,由于我没有root权限,所以只能用最简单的办法:将当前容器通过docker commit命令提交为一个镜像,然后重新执行docker run命令添加端口映射

    1. 先停止当前容器
    sudo docker stop [你的容器名字]
    
    • 可以运行sudo docker ps -a 查看当前所有运行的容器的信息,图中所选就是容器名字
      在这里插入图片描述
    2. 将容器保存为一个新的镜像
    sudo docker commit [选择的容器名字] [新的镜像名字]
    
    3. 用新的镜像运行新的容器
    sudo docker run -it -d --name [自己命名容器的名字] p 宿主端口号:容器端口号 [镜像名字]
    
    4.进入启动的容器内(可以通过步骤1知道容器id)
    sudo docker exec -it [容器Id] /bin/bash
    
    展开全文
  • Linux安装Docker容器

    2018-08-23 16:27:16
    Linux安装Docker容器 检查安装机器的系统版本,必须是必须centos 7 以上 查看系统版本 `cat /etc/redhat-release` 运行这个命令 `yum install -y yum-utils device-mapper-persistent-data` 3. ...

    Linux安装Docker容器

    1. 检查安装机器的系统版本,必须是必须centos 7 以上
      查看系统版本
     `cat /etc/redhat-release`
    

    这里写图片描述

    1. 运行这个命令
     `yum install -y yum-utils device-mapper-persistent-data`
    

    这里写图片描述
    3. 出现上图这样在运行这个添加仓库文件命令

       yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    

    这里写图片描述
    4. 安装命令 yum install -y docker-ce
    这里写图片描述
    5.安装完成后执行这两条命令,这两条命令是开机启动

    systemctl start docker
    systemctl enable docker
    

    6.修改成中国节点

     cat > /etc/docker/er/daemon.json<<EO<<EOF
    {
    	"registry-mirrors": [" ["https://registry.docker-cn.com"]
    }"]
    }
    EOF
    

    7.完成后重启服务器

     reboot
    

    博主QQ交流群:Java技术|SpringCloud交流群 413531925

    展开全文
  • Docker 容器内服务开机自动启动 添加命令: vi /etc/crontab 注释:设置计划任务 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job ...
  • harbor的安装部署一、Harbor二、安装部署harbor v1.10.0安装准备安装三、GUIl界面使用四、本机上传拉取镜像本机上传本机拉取五、远程主机上传下载镜像六、harbor用户管理七、harbor私有仓库八、为harbor添加内容扫描...
  • docker容器的创建 添加链接描述
  • docker容器添加定时任务方法和普通linux添加区别 docker容器中: 1、在容器中首先进入容器平台: 命令如下: docker-compose exec workspace bash 2、查看crontab定时任务 crontab -l 3、添加定时任务,进入...
  • 使用 Alpine Linux 发行版的 Docker 镜像容器。 仅仅适用于没有安装uclibc的系统。 修改步骤 进入容器命令行 # docker exec -it container_name /bin/sh 安装 timezone 数据包 # apk add -U ...
  • 三、Docker Hub注册登录镜像分类推送镜像自动构建四、创建私有仓库容器运行在私有仓库搜索、上传、下载镜像本地上传,下载镜像远程主机上传下载镜像五、 为docker仓库添加加密功能仓库配置客户端配置本机测试远程...
  • Docker容器添加Linux的基础命令

    千次阅读 2019-08-08 10:08:00
    前言 进入 docker容器后,我想使用vi命令进行编辑,却始终无法使用,走了很多错路。先是在本地配置好文件后,然后将本地文件上传到docker容器中...进行以上操作就可以在容器中自由的使用其他linux的命令和方法了.
  • Docker 容器添加字体

    千次阅读 2020-09-12 15:02:25
    在 Windows 上可能运行的没有问题,但是切换到 Linux,到容器时,字体找不到就会出现乱码。 解决办法很简单。 复制需要用的字体到容器中即可,具体操作方法如下: FROM 你的基础镜像 COPY windows /usr/share/fonts/...
  • 1、docker服务自动重启 ...2.1在启动容器时,添加--restart=always参数,如 docker run --restart=always 2.2如果容器已经启动,可以使用命令更新参数 docker update --restart=always 容器id ...
  • Docker容器是不支持后台服务的,像systemctl service crontab这些后台运行的服务是不能通过 RUN systemctl start nginx 类似这种方案实现的,你必须写自己的entrypoint脚本来启动。本文记录了基于Debian的docker...
  • 一、创建容器时运行包含自启动路径的命令 docker run -p 80:80 -i -t -d --restart=always ubuntu:18.04 /bin/bash -c "/etc/rc.local; /bin/bash" 然后: 二、所有想在开机执行的命令都可以写在里面 自启动 ...
  • linux centos7 部署docker spring boot容器 前置需求:linux服务器部署好docker,java,maven 新建spring boot项目,添加web依赖,创建一个controller 修改pom,添加docker插件 创建Dockerfile(2,3两步可参考我的...
  • 使用Dockernet,您可以通过简单的方式添加自定义接口,配置静态IP地址以及向Linux容器添加静态路由。 开发人员: Zhu 这个项目的灵感来自。 内容表 注意事项 启动容器时使用--net=none选项,以告知Docker不要...
  • 然后,您可以通过添加端口向前并在视频文件中安装卷来运行容器docker run -d -p 32400:32400 -v /mnt/videos:/videos:ro plex 注意:我没有亲自尝试以这种方式实际查看plex上的任何介质。 可能需要转发其他端口...
  • 2、yum的配置管理,添加docker的软件源地址 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 3、更新yum缓存  sudo yum makecache fast
  • 1.升级yum yum update -y 2.安装docker sudo yum install -y yum-utils device-mapper-persistent-data lvm2 ...sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker...
  • Flaxton是一个开源项目,可以使用Linux ipTables自动对Docker容器进行负载平衡,以获取最佳性能和可伸缩性。 使用Flaxton,您只需要扩展容器的数量即可,而无需像现在通过添加容器的IP地址来使用其他TCP负载平衡...
  • 运行容器,在busybox里添加静态路由要求有真正的root权限,所以要加--privileged=true $ docker run --rm --name box1 -d --net none --privileged=true busybox sleep 9999 $ docker run --rm --name box2 -d --...
  • Docker容器使用和镜像制作

    千次阅读 2018-04-08 16:15:24
    Docker安装我是在Ubuntu 16上安装的dockerlinux安装docker只需要一个命令:sudo apt-get install docker.io运行完后,可以在终端输入docker看到以下信息证明我们安装成功了 注:提示权限问题就添加sudodocker ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 512
精华内容 204
关键字:

linuxdocker添加容器

linux 订阅