docker安装nginx
#1、搜索镜像 search 建议大家去docker
#2、下载镜像 pull
docker pull nginx #如果不带版本号的话,那么直接下载最新的Nginx镜像
如果不指定版本号的话,那么会默认下载latest也就是最近、最新的nginx镜像
#docker images 查看本地镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 605c77e624dd 11 days ago 141MB
hello-world latest feb5d9fea6a5 3 months ago 13.3kB
centos latest 5d0da3dc9764 3 months ago 231MB
启动nginx服务、
#docker run -d --name nginx11 -p 3388:80 nginx
# run就是运行的意思
#-d就是后台启动容器并返回容器id
#--name 给这个容器起一个名字 叫做nginx11
# -p 指定外部端口给容器里80 (也可以理解把80端口映射为3388端口) 最后一个nginx就是容器的名字
[root@localhost ~]# docker run -d --name nginx11 -p 3388:80 nginx
9f435eb63bed278a0bf6e0c0c5500834ac416342c6b2e42d0e304f9dfbb11cb9
#使用docker ps 查看一下启动中的镜像
docker ps
可以看到ports下面显示 0.0.0.0:3388->80/tcp, :::3388->80/tcp
就说明端口映射成功 并且nginx启动成功、
那么我们来输入虚拟机的IP加上3388端口号。
http://192.168.0.219:3388/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZSRwvtd9-1641860324057)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220110172934143.png)]
可以看到,和我们正常安装的nginx没有什么区别,无非就是端口号换了一下
这里注意一下,如果时阿里云ecs的话 记得把安全组开一下,都是泪。。。
#这里我们进入nginx的内部试一下 docker exec -it nginx11 /bin/bash
#-it 等于 -i -t 的意思 其实是两个命令
# -i 交互式启动
# -t 给与一个伪端 (其实我就直接理解为后台交互式启动 你们随意)
# nginx11就是容器的名字 这里也可以用容器的id代替
#/bin/bash 不要问 问就是害怕你进错了 (狗头保命)
[root@localhost ~]# docker exec -it nginx11 /bin/bash
root@9f435eb63bed:/# ls
bin boot dev docker-entrypoint.d docker-entrypoint.sh etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
root@9f435eb63bed:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@9f435eb63bed:/# cd /etc/nginx/
root@9f435eb63bed:/etc/nginx# ls
conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params
root@9f435eb63bed:/etc/nginx#
#如果要修改配置文件的话 那么就直接改conf就可以了。
#这里docker容器里面是没有vi 或者vim的
#apt-get update 先运行这个命令
#apt-get install vim 然后安装vim (apt-get 感觉和centos的yum差不多)
docker安装tomcat
docker run -it --rm tomcat:9.0
#--rm 这里代表的意思是用完即删除 这里删除的是容器,但是镜像还在
# tomcat:9.0指定tomcat9.0的版本 不加就直接使用最新的tomcat
这个时候已经启动了tomcat,ctrl+c停掉这个服务。查看下镜像
看得到,我们这里使用tomcat9.0的镜像的,但是我们再用docker ps -a看一下
可以看到,啥也没有,就是连记录都没得,所以这里–rm删除的只是容器不是镜像。
#那么我们现在使用命令重新启动一下
docker run -d -p 4444:8080 --name tomcat03 tomcat
[root@localhost ~]# docker run -d -p 9999:8080 --name tomcat03 tomcat
86e1b1a0e26ac0b07e0653580fe7562b58fb03a5286a0fb5fb0539715e87cca4
docker: Error response from daemon: driver failed programming external connectivity on endpoint tomcat03 (2bfedcb0df62fa13af388339859018320178196111ef89206bb29ac739e43f85): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 9999 -j DNAT --to-destination 172.17.0.3:8080 ! -i docker0: iptables: No chain/target/match by that name.
(exit status 1)).
#哦豁,启动的时候报错了,这里报错我查了下 ,重启下docker就好
docker容器的底层原理:
在启动docker的时候会自动在iptables中注册一个链,通过防火墙的链也可以找到其注册的信息,主要注册这些链,是docker中的容器为了暴露端口而使用的
具体原因是你删除了iptables中的链
删除链接的方式有很多种
重启firewalld防火墙即可对其清除,firewalld是centos7以上,iptables是centos6以下都会有,而firewalld的底层是涉及在iptables上的,在启动firewalld的时候会自动删除iptables链的相关链接
直接重启docker就好。
重启过后就可以正常运行了。
但是这里我们直接访问的话是报404,原因是因为tomcat里面的webapps是空的 。
我们进入容器看一下
#docker exec -it tomcat03 /bin/bash
[root@localhost ~]# docker exec -it tomcat03 /bin/bash
root@14bd56032674:/usr/local/tomcat# ls
BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
root@14bd56032674:/usr/local/tomcat# cd webapps
root@14bd56032674:/usr/local/tomcat/webapps# cd ..
root@14bd56032674:/usr/local/tomcat# cd webapps.dist/
root@14bd56032674:/usr/local/tomcat/webapps.dist# ls
ROOT docs examples host-manager manager
root@14bd56032674:/usr/local/tomcat/webapps.dist#
我们可以看到,webapps是空的,在webapps里面是有真正的文件。那么我们把webapps文件复制过去
root@14bd56032674:/usr/local/tomcat/webapps.dist# cd ..
root@14bd56032674:/usr/local/tomcat# cp webapps.dist/* webapps
cp: -r not specified; omitting directory 'webapps.dist/ROOT'
cp: -r not specified; omitting directory 'webapps.dist/docs'
cp: -r not specified; omitting directory 'webapps.dist/examples'
cp: -r not specified; omitting directory 'webapps.dist/host-manager'
cp: -r not specified; omitting directory 'webapps.dist/manager'
root@14bd56032674:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@14bd56032674:/usr/local/tomcat# cd webapps
root@14bd56032674:/usr/local/tomcat/webapps# ;s
bash: syntax error near unexpected token `;'
root@14bd56032674:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
root@14bd56032674:/usr/local/tomcat/webapps#
这里拷贝的时候提示要加-r 加一下就好
这个时候 我们再次访问一下9999端口看一下。
正常访问没得问题。
最后奉上点docker常用命令
docker 的常用命令
docker pull -- 从镜像中央库 下载镜像到本地docker docekr pull image:tags
docker images -- 查看所有的已下载的镜像
docker image ls -- 与上面的功能相同
docker save -- 将镜像打包保存到磁盘中 docker save image:tags -o target.tar
docker load target.tar -- 将打包的镜像从磁盘中读取到docker
docker search image -- 从中央仓库搜索该关键字存在镜像 docker search redis,但是不推荐使用,不太容易看清系统内核等信息
docker inspect image:tags -- 查看镜像以及标签的详细信息,里面包含了环境中会存在哪些会安装什么东西
docker inspect -f {{".Size"}} redis:6.0.9 -f 可以直接筛选自己可以想看到的信息
docker rmi image:tags -- 删除指定镜像
docker image rm image:tags -- 同上一样也是删除镜像
docker history image:tags -- 查看镜像的层次创建信息
docker tag image:tags target:tags -- 修改镜像的名称信息,会创建一个新的镜像。注意:会存在2个,不是真正意义的改名称
这一块需要注意,经过测试如果tag 复制一份别名的镜像如果存在name + tag 相同的情况时,会直接将之前的给覆盖不会报错。
docker run -it --rm image:tags -- 在容器启动镜像并且进入容器 但是外部没有办法访问
docker run -it --rm -p hostPort:dockerPort iamge:tags -- 同上,但是对外部开启了主机的端口映射,宿主主机只需要访问hostPort就可以
访问到容器中的服务,docker run -it --rm -p 8080:6379 redis:6.0.9 就可以通过8080 连接到 docker容器中的服务进行使用
--name 给予创建的容器一个名字、不允许重复
-p 绑定docker容器和主机的端口映射,不能冲突
-i 交互式启动
-t 给予一个伪端
--rm 当断开容器容器自动删除
-d 后台执行启动 不能与rm搭配使用
docker logs -- 查看程序终端启动的控制台打印信息
-f 滚动打印
docker ps -- 查看运行中的全部容器
-a 查询包含不运行的容器
docekr rm container -- 删除容器,不允许删除正在运行的。支持按照名称和容器id删除
-f 强制删除容器
docker start container -- 启动已经创建的容器,服务就会启动
docker stop container -- 停止容器的运行,服务也就会停止
docker restart container -- 重新启动容器
docker create -it --name name -p hostPort:dockerPort image:tag -- 通过镜像创建容器,但是不启动
docker exec -- 进入容器的终端进行操作
docker kill -- stop无法停止容器,使用kill 杀死容器
感谢狂神大佬公开的视频