ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] # Docker网络 * * * * * ## 1. docker的端口映射 * docker中的应用想要与外界进行网络通信,需要在运行container时指定宿主机与docker-container的端口映射 * 命令 1. 指定固定端口映射 docker run -p ip:hostPort:containerPort [--name] [-i] [-t] 镜像名 [COMMAND][ARG...] ip:表示宿主机ip hostPort:宿主机端口号 containerPort:容器端口号 [--name]可以自定义container名称 如: * sudo docker run -d -i -t -p 192.168.56.110:45612:8080 --name constantPort hub.c.163.com/library/ubuntu:14.04.5 /bin/bash 执行sudo docker ps -a ![](https://box.kancloud.cn/70811f306bf3d8019fd32c9f632d21e8_921x100.png) * 也可以加多个-p参数达到多个端口的固定映射 sudo docker run -d -it -p 48080:8080 -p 42222:22 --name ports hub.c.163.com/library/ubuntu:14.04.5 2. 宿主机端口到docker-container固定端口的随机映射。 docker run -p containerPort [--name] [-i] [-t] 镜像名 [COMMAND][ARG...] 如: sudo docker run -i -t -d -p 80 --name randomPort hub.c.163.com/library/ubuntu:14.04.5 /bin/bash -d:表示后台运行 接下类执行sudo docker ps -a,查看容器运行状态和端口映射关系:图2 ![](https://box.kancloud.cn/c0e40300af94e59aa06c87107249d3e8_931x134.png) * * * * * ## 2.docker之Nignx简单静态页面 1. 安装nginx (1)apt-get update (2)apt-get install nginx (3)sysv-rc-conf nginx on 2. 修改nginx配 vim /etc/nginx/sites-enabled/default ~~~ server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; root /usr/share/nginx/html; index index.html index.htm; location / { root /usr/share/nginx/html; try_files $uri $uri/ =404; index index.html; } ~~~ * 访问:宿主机+端口---->docker-container+端口 有两种访问方式 1. 宿主机+宿主机与docker-container映射端口 http://192.168.56.110:32781/ 访问对应 图2。 得到如图3 ![](https://box.kancloud.cn/cca7ae294ea77faa3b01b38780726987_774x352.png) 2. docker-container的ip+端口(只限宿主机) * 执行ifconfig命令得到docker container ip * 执行 curl http://172.17.0.16 得到如图 ![](https://box.kancloud.cn/2a9e7af12022576c29a837b2b9816fd6_843x514.png) * * * * * ## 3.利用Dockerfile构建镜像,运行多端口映射 * 上面通过命令开启了端口,但是对运行的容器开启端口映射比较麻烦,也不是正规的做法,有两种办法 1. 在运行的容器构建镜像(或者export+import镜像),在通过dockerfile构建多端口映射镜像。最后利用镜像运行容器。 2. 在最基础的镜像上通过dockerfile构建多端口映射,最后利用这个镜像运行容器。 ### 3.1 利用运行的容器制作镜像 * docker commit [OPTIONS] <容器id> <新镜像名> options: -a :提交的镜像作者; -c :使用Dockerfile指令来创建镜像; -m :提交时的说明文字; -p :在commit时,将容器暂停。 (1)查看容器id,docker ps -a ![](https://box.kancloud.cn/c0ae90595bcdfb4c0cda5349d0d52868_904x149.png) (2)执行commit命令 sudo docker commit -m "commit a test for ISO" -a "tuna_dai" a728d7f79412 myubuntu:1.0 (3) 查看镜像 ![](https://box.kancloud.cn/54d65022202d403fd14f23f0fd21536e_914x132.png) * * * * * ### 3.2 Dockerfile创建容器 * Dockerfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令 例子: ~~~ FROM hub.c.163.com/library/ubuntu:14.04.5 # MAINTAINER_INFO MAINTAINER dailin 931309012@qq.com # PORT EXPOSE 8080 EXPOSE 22 EXPOSE 80 EXPOSE 8005 EXPOSE 8443 ~~~ (1)构建Dockerfile文件 (2)构建镜像 sudo docker build -t ubuntu:2.1 -f /home/tuna/dockerfile/Dockerfile /home/tuna ![](https://box.kancloud.cn/196d5b8526adf87e6ef07cd5208aee7e_869x208.png) * -t选项让Docker分配一个伪终端(pseudo-tty)并绑定到容器的标准输入上 * -f来指定Dockerfile文件的位置,后面的/soft及其目录下必须能够找到Dockerfile文件否则就会报上下文环境的错误,MV,COPY,ADD的文件位置都是相对/soft来说的,后面的路径是包含dockerfile目录的一个上层路径 (3)运行容器 sudo docker run -d -it -P --name multipleports ubuntu:2.1 这里也可以用多个-p来实现固定dockerfile中定义的端口映射 通过docker ps查看一下 ![](https://box.kancloud.cn/4c4398b52bc7f0720c6e7d9555f6d2e7_923x139.png) 图中容器multipleports已经开启了8080,22,80,8005,8443端口的映射,这种方式达到了随机映射,但是没有固定映射端口。 1. FROM <镜像>:构建指令,必须指定且需要在Dockerfile其他指令的前面。后续的指令都依赖于该指令指定的image。FROM指令指定的基础image可以是官方远程仓库中的,也可以位于本地仓库。 2. MAINTAINER(用来指定镜像创建者信息) 构建指令,用于将image的制作者相关的信息写入到image中。当我们对该image执行docker inspect命令时,输出中有相应的字段记录该信息。 3. RUN(安装软件用) 构建指令,RUN可以运行任何被基础image支持的命令。如基础image选择了ubuntu,那么软件管理部分只能使用ubuntu的命令。 4. EXPOSE(指定容器需要映射到宿主机器的端口) 设置指令,该指令会将容器中的端口映射成宿主机器中的某个端口。要完成整个操作需要两个步骤,首先在Dockerfile使用EXPOSE设置需要映射的容器端口,然后在运行容器的时候指定-p选项加上EXPOSE设置的端口,这样EXPOSE设置的端口号会被随机映射成宿主机器中的一个端口号。也可以指定需要映射到宿主机器的那个端口,这时要确保宿主机器上的端口号没有被使用。EXPOSE指令可以一次设置多个端口号,相应的运行容器的时候,可以配套的多次使用-p选项。 * * * * * ## 4. docker安装ssh服务 1. 首先安装ssh apt-get update apt-get install ssh -y 安装sysv-rc-conf sysv-rc-conf ssh on ---设置ssh开机自启 service ssh start 2. 如果root用户没有密码,要给root用户设置密码 passwd root 3. 如果ssh可以建立连接,root用户输入密码怎么都连接不上,去修改root的登录控制,然后重启ssh服务。