① Docker-端口映射
docker容器在启动的时候,如果不指定端口映射参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。
亦可使用Dockerfile文件中的EXPOSE指令来配置。
例如:(不推荐使用)
例如:
以上指令会将容器的80端口随机映射到宿主机的一个端口上。
例如:
以上指令会将容器的80端口映射到宿主机的8000端口上。
以上指令会将容器的ip192.168.0.100和80端口,随机映射到宿主机的一个端口上。
以上指令会将容器的ip192.168.0.100和80端口,映射到宿主机的8000端口。
② Docker 映射文件
Docker 可以映射文件,需要注意,文件路径必须完整,并且映射的文件必须存在,如果不存在,会认为是目录。映射的文件内容会传递到容器,并不是将镜像中现有的文件复制出来。所以,如果需要映射单个文件,需要先编辑好并放置在目录中。
③ Docker 如何知道需要映射的目录
一般在Dockerfile文件里面会有说明"VOLUME",比如你的nginx镜像可以查看其构建的Dockerfile,或者官方描述。如果都没有就通过查看镜像安装过程来获取需要挂在的目录。
④ Docker 入门 (07) 部署nginx 并且映射本地配置文件
目标:
1. 利用docker部署一个nginx容器
2.为nginx 容器设置配置文件 , 并且映射到宿主机(本机)
操作步骤:
1.拉取nginx镜像,并尝试简单运行(忘记怎么操作请参考第五节)
2.在本地新增配置文件 , 为了后面映射容器使用 ,我习惯是放到 /etc/docker/nginx-config , 按你个人习惯新增
3.进入config ,我们需要创建一个简单配置文件 , 这里就来个简单的吧
4.因为我稍后需要占用的是8080端口 , 请确认云服务器端是否开放
5. 万事俱备 , 尝试启动吧
6. 使用你的 服务器ip+8080端口访问测试 , 看到您的写的 index,html 内容, 代表启动成功!
7.具体映射位置 可以 使用 docker exec -it [容器ID] /bin/bash 命令去参考对应映射文件 ,原理就应该明白了
结语:
通过本节的 nginx 映射本地配置文件 , 应该掌握对docker映射文件的基本使用了 , 希望大家都把自己的nginx跑起来吧
⑤ 如何把docker进程把启动文件映射到容器内
Docker容器运行后,如何进入容器进行操作呢?起初我是用SSH。如果只启动一个容器,用SSH还能应付,只需要将容器的22端口映射到本机的一个端口即可。当我启动了五个容器后,每个容器默认是没有配置SSH Server的,安装配置SSHD,映射容器SSH端口,实在是麻烦。 我发现很多Docker镜像都是没有安装SSHD服务的,难道有其他方法进入Docker容器?有很多种方法,包括使用 docker attach 命令或 nsenter 工具等。 使用 attach 命令有时候并不方便。当多个窗口同时 attach 到同一个容器的时候,所有窗口都会同步显示。 nsenter 可以访问另一个进程的名字空间。 为了连接到容器,你还需要找到容器的第一个进程的 PID,可以通过下面的命令获取。 PID=$(docker inspect –format “{{ .State.Pid }}” <container>) //将<container>换成你的容器id 通过这个 PID,就可以连接到这个容器: $ nsenter –target $PID –mount –uts –ipc –net –pid 更简单的,建议大家下载 .bashrc_docker,并将内容放到 .bashrc 中。
⑥ Docker映射配置文件到宿主机
最近在做mysql中间件的docker,搞了mycat、mysql route都拉不起来容器,最后试试proxysql可以,proxysql官方发布了镜像,感觉比较可靠。但是遇到一个小问题,笔者以前写过一篇文章-Docker MySQL数据持久化,用数据卷挂载的方式将mysql的数据(映射数据目录)持久化到宿主机。那么配置文件也是有必要来映射的,注意就可以避免在容器内安装编辑器。
容器内有apt 和ap-get工具,安装前要apt update(或者apt-get update,较慢)更新软件列表,然后apt install(或者apt-get install),这样会增大容器空间,是没有必要的。笔者以前就是这样操作的,但是比较麻烦,而且容器如果是内部网络的话来安装的话就更加不方便了。笔者在映射数据目录时使用-v /home/mysql/data:/var/lib/mysql 。但是使用同样的分发,今天在映射proxysql的配置文件proxysql.cnf时遇到一个麻烦。
先看看笔者挂载时遇到的问题: Are you trying to mount a directory onto a file。
都是文件,那里来的目录呢。映射的意思是将可以将宿主机目录挂载到容器中,那么可能就是将/home/mycentos/proxysql.cnf设别为一个目录了,因为容器内/etc/proxysql.cnf的是真实存在的文件。在/home/mycentos/目录下ls -l查看一下。
果然是目录!辗转反侧找到原因是 docker启动容器进行挂载的时候,如果路径不存在,那么docker会自动创建一个目录。
笔者的home/mycentos/目录下没有proxysql.cnf文件,挂载时docker就新建了一个proxysql.cnf的目录,但是这个对于挂载数据目录时是十分有用的,对于配置文件来说是不行的。于是笔者在目录home/mycentos/下新建了一个proxysql.cnf文件,再次运行docker run成功(前面运行失败的容器需要删除,不然名称冲突)。
docker run -itd --name proxysql -p 16032:6032 -p 16033:6033 -p 16070:6070 -v /home/mycentos/proxysql.cnf:/etc/proxysql.cnf proxysql/proxysql
挂载后,容器内的/etc/proxysql.cnf配置文件是空的,不挂载的情况下是保持默认配置文件内容的,使用徐需要在编辑/home/mycentos/proxysql.cnf文件,然后进入容器后/etc/proxysql.cnf配置文件会跟随改变的。但是配置文件为空,那么就要从头开始配置,这对于配置文件很多的话是不方便的,保留原来的配置配置文件,再在里面修改会更加方便。这里笔者只能想到先运行一个容器,然后docker cp拷贝容器内的文件或者文件夹,在删除这个容器,另外开一个配置文件映射的容器。
映射配置文件避免在容器内进行apt操作,使得容器膨胀过大。比如你要安装编辑器vi,首先要apt update更新,然后apt install ,相比于在容器外对其进行操作来说,更加麻烦没必要。
⑦ 如何把docker进程把启动文件映射到容器内
1.安装Docker在开始前,我们首先得确保在Linux主机中已经安装了Docker。这里,我运行的是CentOS7主机,我们将运行yum管理器和下面的命令来安装Docker。#yuminstalldocker#systemctlrestartdocker.service2.创建Dockerfile现在,Docker守护进程已经在运行中了,我们现在准备创建自己的FirefoxDocker容器。我们要创建一个Dockerfile,在其中我们要输入需要的配置来创建一个可以工作的Firefox容器。为了运行Docker镜像我们需要使用最新版本的CentOS。要创建Docker镜像,我们需要用文本编辑器创建一个名为Dockerfile的文件。#nanoDockerfile接着,在Dockerfile中添加下面的行并保存。#!/bin/bashFROMcentos:7RUNyuminstall-yfirefox#用你自己的uid/gid替换下面的0RUNexportuid=0gid=0RUNmkdir-p/home/developerRUNecho"developer:x:${uid}:${gid}:Developer,,,:/home/developer:/bin/bash">>/etc/passwdRUNecho"developer:x:${uid}:">>/etc/groupRUNecho"developerALL=(ALL)NOPASSWD:ALL">>/etc/sudoersRUNchmod0440/etc/sudoersRUNchown${uid}:${gid}-R/home/developerUSERdeveloperENVHOME/home/developerCMD/usr/bin/firefox注意:在第四行的配置中,用你自己的用户和组id来替换0。我们可以用下面的命令在shell或者终端中得到uid和gid。#id$USER3.构造Docker容器下面我们就要根据上面的Dockerfile构建一个容器。它会安装firefox浏览器和它需要的包。它接着会设置用户权限并让它可以工作。这里镜像名是firefox,你可以根据你的需要命名。#dockerbuild--rm-tfirefox.4.运行Docker容器现在,如果一切顺利,我们现在可以在运行在CentOS7镜像中的Docker容器里面运行我们的GUI程序也就是Firefox浏览器了。#dockerrun-ti--rm-eDISPLAY=$DISPLAY-v/tmp/.X11-unix:/tmp/.X11-unixfirefox总结在Docker容器中运行GUI程序是一次很棒的体验,它对你的主机文件系统没有任何的伤害。它完全依赖你的Docker容器。本教程中,我尝试了CentOS7Docker中的Firefox。我们可以用这个技术尝试的GUI程序。
⑧ 如何把docker进程把启动文件映射到容器内
953b7cc14:~$ docker ps
docker: error while loading shared libraries: libdevmapper.so.1.02: cannot open shared object file: No such file or directory
⑨ 基于 Docker 安装 Nginx,启动运行,外网访问,映射配置文件
基于 Docker 安装 Nginx
查找Nginx镜像
语法:docker search nginx
示例:
获取Nginx镜像
示例:
启动nginx容器实例
说明:--name nginx nginx 第一个nginx是通过--name指定的nginx容器实例的名称,另一个nginx表示nginx仓库的名称。
查看nginx容器实例的进程信息
通过ps -ef | grep nginx查看
进入nginx容器内
杀死nginx容器实例
停止nginx实例
启动nginx容器实例
重启nginx容器实例
移除nginx容器实例
案例
暴露外部端口
基于docker run -d --name nginx nginx方法启动nginx后,Docker 容器并没有对外暴露访问的端口,即无法通过当前主机外部浏览器器访问nginx。那么该怎么样呢?
语法:
-p 80:80:通过-p来指定Docker容器中nginx实例对外开放的端口。本例中,第一个80端口是对外开放的端口,第二个80端口指对外开放的端口映射到容器里的端口号。
示例:
通过当前主机外的浏览器访问nginx,如下图:
指定外部的配置文件
语法:
说明:
-v: 表示挂载一个本机目录或文件到容器里。
-v /develop/nginx/nginx.conf:/etc/nginx/nginx.conf:将/develop/nginx/nginx.conf配置文件挂载到容器中/etc/nginx/nginx.conf这个配置文件中。
-v /develop:/develop:将/develop这个目录挂载到容器里的/develop这个目录里。
示例:
注意事项:指定外部配置文件,同时需要指定nginx的首页面,否则会抛出404错误,原因就是因为nginx找不到配置文件中默认的index页面。
本例中,使用/develop/apps/static/index.html替代了容器里的nginx默认的index页面,同时,-v /develop:/develop挂载根目录即可访问子目录。
指定网络模式:--net=bridge 默认模式
其中8080是指主机的端口,而80是指容器的端口
我们先看一下端口的状态
docker是运行在Linux上的,在Windows中运行docker,实际上还是在Windows下先安装了一个Linux环境,然后在这个系统中运行的docker。也就是说,服务中使用的localhost指的是这个Linux环境的地址,而不是我们的宿主环境Windows。我们可以通过命令:
找到这个Linux的ip地址,一般情况下这个地址是192.168.99.100,然后在Windows的浏览器中,输入这个地址,加上服务的端口即可启用了。