linux端口映射
什么是Docker?
docker作为一个区别与虚拟机的多平台运行的系统容器,没有独立的虚拟内核直接运行再宿主的硬件中。可以快速部署系统层上的各种服务。
docker 命令基础:
docker images 查看容器已有镜像
dokcer ps / docker -a 查看正在运行的容器/所有容器
docker rm -f 删除或强制删除运行或所有容器
docker rmi 删除镜像 docker images -q` 删除所有镜像 “–>是esc键再英文输入状态下
docker search images_name 搜索相关的镜像文件 docker start/stop/status 开启/关闭/状态容器
docker部署基础命令:
docker run //容器内启用某镜像docker run -d –name=name 容器 init //意思是初始化后台运行name的镜像, -d //表示后台运行容器,并返回容器iddocker run -d –name=name -p 80:80 容器 //意思是后台运行容器并将容器内的服务端口映射到宿主机对应端口 -p //dokcer内容器的端口流量转发到宿主机流量 方便服务出网docker exec -t -i 容器 /bin/bash //意思是,使用/bin/bash命令模式编辑docker容器 exec 表示以exec的方式进入容器 -i //以交互模式运行容器, -t //为容器重新分配一个伪输入终端 通常与-i同时使用docker commint 容器 new_images //将容器保存为镜像文件–可以将你编辑好的容器打包出来 后续直接使用docker调用docker save -o new_images.tar 容器_ID //将容器导出为一个tor格式文件 save //保存的意思咯 -o //表示输出文件内容到指定文件中docker load -i 镜像 标识 // 调用-加载镜像文件到容器中 —emmm,新手可能看命令有点不太明白,接下来我们操作几遍,实战出真知。—
实战部署lnmp的镜像:
1.使用kali linux(centos也可以只要基于linux,docker也支持windows 但是我个人比较习惯linux )
centos安装docker (emmm,现在能不能用我不知道,反正之前可以,不行就自己百度咯)
yum install -y https://mirrors.aliyun.com/docker-ce/linux/centos/7/x86_64/edge/Packages/containerd.io-1.2.6-3.3.el7.x86_64.rpmcurl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repoyum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpmyum install docker-ce -y 2. kali 更新一下源:sudo vi /etc/apt/souce.list (我用的是parrotos系统,所有源更改文件路径在 /etc/apt/source.list.d/parrot.list
更新源之后:
sudo updatesudo apt-get install docker-ce docker -v //查看docker版本信息 出现版本信息了说明docker安装成功显示其他内容就是安装失败 service docker start //这个跟systemctl启动dockers一样 我kali系统使用systemctl不行应该是系统原因。
上面命令敲完之后启动docker之后使用:
service docker status //查看一下状态:
runing???那就说明docker启动成功咯~
3.lnmp环境—意思是linux+nginx+mysql+php构架的网站:
一,所以使用容器环境为docker:
docker search centos //从仓库里搜索centos的镜像
emmm 有点多 他的docker镜像地址获取其实在github仓库有现成的
这么多,那就选择原生干净的centos系统吧,,,顺便说一下系统中怎么手动搭建lnmp环境以及服务的安装启动。
二,从仓库中下载镜像到容器:
docker pull centos //下载centos镜像到容器 这一步有点小慢,因为下载的原镜像系统,比较大~
然后看一下下载载本地的镜像文件信息:
三,在容器中启动镜像:(俩种写法),命令上面讲了不解说了
docker run -d –name=lnmp centos init //第一种使用镜像名称docker run -d –name=lnmp 300e315adb2f init //第二种镜像id启动
docker ps //启动容器之后使用这个查看容器是否启动成功
这个状态就说明啊容器时创建并后台启动成功的。
五,进入容器并操作容器内的东西。
docker exec -t -i lnmp_ID /bin/bash //也不再说了命令意思 注意一点就是 指定的启动的容器返回的id也可以指定容器的名称:docker exec -ti bdeef2e9adbc /bin/bash //俩命令时一样的~
这就说明了 我们进入了容器里面的centos系统 然后网络也是docker容器里面系统的ip地址 ==>ip a 就等于linux的ifconfig (因为centos系统默认没安装networl tool 没有ifconfig这个命令。 ifconfig?是什么??—-额,就是windows的ipconfig一样的效果。)
—————-华丽的分割线————————————————
上面步骤就完成了lnmp的l–>linux
下面就是安装服务 nginx 和 mysql 和 php。
一, 安装nginx:(解说一波:基于debain下的linux系统安装是 dpkg和apt-get ,那么基于redhat的linux系统是 rpm 和 yum 命令来安装)
yum list |grep epel //epel源,因为centos下nginx需要这个源仓库才可以下载nginx
yum install epelxxxx //安装这个命令咯 yum makecache //更新centos的源===>kali的update
yum install -y nginx //下载安装nginx -y 意思是默认下载过程种询问的部分–不理解 不加-y 看看就知道了 二,安装好了nginx就是nginx的基本使用:
nginx -s reload —重新加载nginx的配置文件
nginx -t —-测试配置是不是有问题
nginx -s stop/start/status —-结束/启动/状态nginx服务
nginx -s reload —重启nginx的服务
/usr/share/nginx/htmml –网站代码存放路径。
/etc/nginx/nginx.conf —这是nginx的主配置文件 这个时候就是具体操作了
1. 安装nginx—载容器内的centos系统下操作。
安装nginx(按步骤读图操作)
看到这个就说明安装成功了nginx
2.启动nginx—重点为什么不重新写教程,第一懒,第二这样更有纠错性 绕了我一半天。(启动的命令之前servie 和sysytemctl可以 现在不行了用下面的—–我实验的过程中遇到了这个问题所以上面的一条命令会变化–注意下面的命令是重点,百度了一半天。。。。。)
nginx -h 可以看一下nginx使用帮助
其实问题也没什么就是在启动容器的时候也就是命令:
docker run -d –name=lnmp -p 80:8000 这个命令的时候没有添加参数–privileged导致进入容器之后并没有完全获得root权限 所以无法使用systemctl来启用nginx服务 导致出现了问题。所以现在吧上面创建容器centos镜像的命令更换成:
sudo docker run -d –name=lnmp –privileged=true 容器_ID init
ok 其他命令没有问题问题就出现在这里。操作继续。。。
systemctl start nginx –启动nginx
systemctl status nginx —查看nginx状态
可以了 看到了runing。。。松了一口气。
那么在nginx的网站程序目录下写一个简单的html 看看可不可以访问到这个界面
我们在index.html文件中添加了 hello noisyworld访问宿主ip的80端口并没有访问成功。
其实是因为我们在启动容器的时候吧docker容器的nginx的80端口默认改成了8080 然而nginx的默认监听端口是80 所以我们需要更改nginx的配置文件。
然后进入里面配置文件修改监听的端口80 为8080
然后退出保存 —–至于linux的基础命令 vi编辑器不会用的自己百度去学吧,,,
然后检测一下配置文件,ok就再重新加载一下nginx
然后再访问
宿主机是192.168.44.133ip 访问他的80端口
然后ojbk了~~
——接下来是安装nginx用于支持php语言的软件包–php-fpm 以及就是lnmp环境的php——
一,安装php 一串代码搞定问题l
粘贴复制就行了。
yum -y install php-fpm php php-mysql php-gd libjpeg* php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-bcmath php-mhash 然后着重讲一下php-fpm和nginx的故事—-
php-fpm是作为再nginx下单独运行的php服务。
这是配置php-fpm的配置文件内容 直接复制吧~
启动并修改php-fpm/nginx的配置
启动:systemctl start php-fpm
user nginx;worker_processes auto;error_log /var/log/nginx/error.log;pid /run/nginx.pid;
include /usr/share/nginx/modules/*.conf;
events { worker_connections 1024;}
http { log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘ ‘$status $body_bytes_sent “$http_referer” ‘ ‘”$http_user_agent” “$http_x_forwarded_for”‘;
access_log /var/log/nginx/access.log main;
sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048;
include /etc/nginx/mime.types; default_type application/octet-stream;
include /etc/nginx/conf.d/*.conf;
server { listen 8080 default_server; listen [::]:8080 default_server; server_name _; root /usr/share/nginx/html; index index.php;
location ~ .php$ { root /usr/share/nginx/html; #指定php的根目录 fastcgi_pass 127.0.0.1:9000;#php-fpm的默认端口是9000 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
include /etc/nginx/default.d/*.conf;
location / { }
error_page 404 /404.html; location = /40x.html { }
error_page 500 502 503 504 /50x.html; location = /50x.html { } }
}然后我们新建一个php的文件再访问一下。
再index.php文件内写入; hello noisyworld —php
访问:
成功
—————下面是说一下怎么自主搭建完整的网站程序的——————
那么关于docker如和将本地文件cp到docker里面(也就是将搭建网站的网站源码放入到doker下的nginx服务下面来的相关命令:
docker cp 文件 images:path –宿主文件复制到指定docker文件下的指定目录下 列: docker cp /tools/web.zip 7c8f769c57:/usr/share/nginx/html
docker cp image:file /path —将docker文件复制到宿主文件下 好的知道这个了就行了
接下来就是安装lnmp的—-mysql了
mysql就按照mariadb–很容易:
yum isntall -y mariadb ,ariadb-server就可以了。
完整的lnmp环境就这么操作出来了
我们主题是讲解一篇文章搞定docker
所以接下来就是对docker自己部署的镜像进行封装和调用。
—。。–
将自己部署的环境内容保存为镜像文件lnmp_noisyworld
封装镜像 为lnmp_noisyworld.tar
得到的这个文件可以上传到github然后可以下次直接使用docker加载使用
加载自己封装的docker文件:
然后再加载
要想有版本以及仓库信息 再第一张图的命令改为:
docker load <lnmp_noisyworld lnmp:noisyworld就可以了
—————-docker作用时快速部署环境————-
比如:
mysql
docker run -di -name=xxx -p 3306:3306 -e MYSQL_ROOT_PASSWORD=XXXX image //-e 添加环境那变量
tomcat
docker run -di –name=xx -p 9000:8080 -v local_path:remote_path image // -v挂载本地目录到容器目录 本地目录挂载到容器中同步站点文件
重点注意:
1.docker里面的权限直接通过exec进去得到的不是完全的root
2.lnmp环境自己部署起来因为再docker 需要对应的转发多个服务的端口
3. 以上的sudo 是表示用户获取root权限的以上
4. sudo 其实是一个白名单,他必须要求你是白名单上的人并且有足够证明的凭证才可以获得高权限
5. su 这个很简单 就是你本身就是root的管理者 你拥有这个大门的钥匙。
6. 本次是在内网环境下演示,放在服务器上也是一样的只需要服务器设置好对应的端口出入站规则即可,并且再docker指定映射的时候一致即可。
7. docker多服务端口映射参照dockerfile,其他的去科普吧···
也许你还想知道nat端口映射的知识介绍。