目录
1、docker概念
1.1、镜像(image)
1.2、容器(container)
1.3、仓库(repository)
1.4、理解
2、用docker运行nginx
2.1、正常命令开启nginx
2.2、使用docker容器,启动一个nginx web服务器
2.3、docker容器的背后是进程
1、docker概念
1.1、镜像(image)
镜像就是打包好的软件,里边有程序代码、基础系统、依赖关系的软件包、系统库和工具等等。是需要人们去制作的。镜像的制作的学docker人的必备的技能。
1.2、容器(container)
是运行镜像的地方,背后起一个进程来运行这个镜像。
1.3、仓库(repository)
集中存放镜像的地方,由大佬制作出来,并上传上去的。在企业都是自己的去制作镜像的,因为若是有一些不法份子把病毒代码放在仓库中,下载之后就会中病毒。
docker官方提供的仓库地址:Docker Hub - Docker
国内的仓库地址:道云,Hub · DaoCloud
1.4、理解
一个镜像你可以理解为是一个软件,把镜像放在容器里边,就是运行这个镜像
2、用docker运行nginx
2.1、正常命令开启nginx
🍓[centos安装和启动nginx]🍓
[root@test-docker ~]# yum install nginx -y
# 若是不能安装成功,要先安装epel源。命令为"yum install epel-release -y"
[root@test-docker ~]# systemctl start nginx # 启动nginx进程
[root@test-docker ~]# ps aux|grep nginx # 查看nginx进程是否存在
root 2318 0.0 0.0 39308 1052 ? Ss 17:22 0:00 nginx: master process /usr/sbin/nginx
nginx 2319 0.0 0.0 39696 1824 ? S 17:22 0:00 nginx: worker process
nginx 2320 0.0 0.0 39696 1824 ? S 17:22 0:00 nginx: worker process
nginx 2321 0.0 0.0 39696 1824 ? S 17:22 0:00 nginx: worker process
nginx 2322 0.0 0.0 39696 1824 ? S 17:22 0:00 nginx: worker process
root 2324 0.0 0.0 112824 980 pts/0 S+ 17:22 0:00 grep --color=auto nginx
🚀[查看进程监听哪个端口]🚀
# method1
[root@test-docker ~]# ss -anplut| grep nginx
tcp LISTEN 0 128 *:80 *:* users:(("nginx",pid=2322,fd=6),("nginx",pid=2321,fd=6),("nginx",pid=2320,fd=6),("nginx",pid=2319,fd=6),("nginx",pid=2318,fd=6))
tcp LISTEN 0 128 [::]:80 [::]:* users:(("nginx",pid=2322,fd=7),("nginx",pid=2321,fd=7),("nginx",pid=2320,fd=7),("nginx",pid=2319,fd=7),("nginx",pid=2318,fd=7))
# method2,这个netstat命令需要安装,ss是自带的命令
[root@fttswlp ~]# netstat -anplut |grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1712/nginx: master
tcp6 0 0 :::80 :::* LISTEN 1712/nginx: master
🍓[用网站访问你虚拟机的IP地址]🍓
要是想要访问自己的IP地址,必须关闭防火墙和SElinux
🍓[进入nginx存放网页的目录并进行修改首页且添加一个链接网页]🍓
那怎么才能像京东网页那样点一个文字就能进去新的网页呢?
我们只需要在网页界面上放置另一个网页的关键字(本质上这个关键字就是一个链接)
[root@test-docker ~]# cd /usr/share/nginx/html/
[root@test-docker html]# ls
404.html 50x.html en-US icons img index.html nginx-logo.png poweredby.png
# index.html,是首页文件
[root@localhost html]# rm -rf * # 要是写自己的网页,这里文件都没啥用,所以删掉
[root@localhost html]# vim index.html # 自己编写网页
[root@localhost html]# cat index.html
<html>
<head>
<title>FanMY_71</title>
</head>
<body>
<p> <h1>Welcome to my web</h1>
<p> name: FMY </p>
<p> sex:male </p>
<p>phoneNO:18911111111</p>
<p> Let me show you how I look</p>
<p>this is me </p>
<img src=fan.gif> # 这是照片名字
<p></p>
<a href=study.html>Introduce myself</a> # 这是链接网页
</body>
</html>
[root@localhost html]# cat study.html
<html>
<head>
<title>study</title>
</head>
<body>
<h1><p> purport:learning makes me happy </h1>
<p> So you can see the beauty of my body </p>
<img src=myself.jpg> # 这是照片名字
<h1> Click on the content below to see more exciting content </h1>
<a href=http://www.cpd.com.cn/>more beauty girls wait for you </a>
</body>
<html>
🍓[搞点图片上去]🍓
[root@localhost html]# yum lrzsz -y #lrzsz是linux和windows之间传输文件的工具
[root@localhost html]# rz # 接受文件
# 输入"rz"然后敲击回车,你就可以选择文件传入Linux了
[root@localhost html]# ls
fan.gif index.html myself.jpg study.html
# 注意,我们在网页编辑的时候,照片的名字不要打错,不然会显示不出来
2.2、使用docker容器,启动一个nginx web服务器
参考道云官方网站:Hub · DaoCloud
相当于iptables 的dnat
先把"/usr/share/nginx/html"的内容复制到/web中
原因和解决办法
# 原因:因为之前我们启动了docker并且在制作网页的时候把防火墙关闭了,就导致了连锁反应把docker的自定义链关闭,所以就导致了上边这个问题
# 解决办法
[root@localhost ~]# service docker restart # 重启dokcer服务,会重新去添加docker的自定义链在iptables里
#重起之后,再执行上面那个命令,但是容器名字要改
[root@localhost ~]# docker run --name fan-nginx-1 -v /web:/usr/share/nginx/html:ro -d -p 8080:80 daocloud.io/nginx
"""
命令解释:
doker run 启动容器
--name sc-nginx-2 指定容器的名字
-v /web:/usr/share/nginx/html:ro 数据卷:可以是实现宿主机和容器直接的数据共享
/web 是宿主机的目录 /usr/share/nginx/html 是容器里的系统的目录的路径 ro 只读
-d 在后台启动一个容器进程 deamon
-p 端口的映射:相当于iptables的DNAT 8080:80 访问宿主机的8080端口会转发给容器的80端口
daocloud.io/nginx 到daocloud.io网站下载nginx的镜像
"""
🍓[结果查看]🍓
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0f1c0c7fdc0d daocloud.io/nginx "/docker-entrypoint.…" 17 minutes ago Up 17 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp fan-nginx-1
[root@localhost ~]# ss -anplit |grep 8080
LISTEN 0 128 *:8080 *:* users:(("docker-proxy",pid=2063,fd=4))
LISTEN 0 128 [::]:8080 [::]:* users:(("docker-proxy",pid=2070,fd=4))
[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0f1c0c7fdc0d daocloud.io/nginx "/docker-entrypoint.…" 34 minutes ago Up 34 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp fan-nginx-1
2b180d53996f hello-world "/hello" 41 minutes ago Exited (0) 41 minutes ago goofy_cray
[修改web的内容查看IP地址对应的网页]
[root@localhost web]# cat index.html
<html>
<head>
<title>FanMY_71</title>
</head>
<body>
<p> <h1>Welcome to my web,this is docker</h1> # 在这后边添加了一段代码
<p> name: FMY </p>
<p> sex:male </p>
<p>phoneNO:18911111111</p>
<p> Let me show you how I look</p>
<p>this is me </p>
<img src=fan.gif>
<p></p>
<a href=study.html>Introduce myself</a>
</body>
</html>
🍓[多添加几个到网页的端口]🍓
[root@localhost web]# docker run --name fan-nginx-2 -v /web:/usr/share/nginx/html:ro -d -p 8081:80 daocloud.io/nginx
668f7bfbac94559140d858a6501734aefb5685ca5ece46ea0d33812bf502b51f
# 这串数字是容器的唯一id,唯一标识符。
# 添加容器fan-nginx-2,端口是8081
[root@localhost ~]# docker ps -a|grep fan-nginx-2
668f7bfbac94 daocloud.io/nginx "/docker-entrypoint.…" 46 hours ago Exited (0) 45 hours ago fan-nginx-2
2.3、docker容器的背后是进程
一个容器就是一个进程在支撑
[root@localhost web]# ps aux|grep docker
root 2455 0.1 3.3 1110200 61832 ? Ssl 12:15 0:00 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
root 2626 0.0 0.6 972752 12376 ? Sl 12:15 0:00 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8081 -container-ip 172.17.0.2 -container-port 80
root 2632 0.0 0.4 825288 8252 ? Sl 12:15 0:00 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 8081 -container-ip 172.17.0.2 -container-port 80
root 2747 0.0 0.0 112824 980 pts/0 S+ 12:20 0:00 grep --color=auto docker
3、随章小练习
# 若是Ubuntu的系统只要在这些命令前边添加sudo就行了。
# 1
[root@localhost ~]# docker pull redis
# 2
[root@localhost ~]# docker pull nginx
# 3
fmy@dockerserever:~$ sudo docker run --name fan-nginx-1 -d -p 8081:80 nginx
c0fe3a59a0221eecb20a44b87d41dde54a437fececcb3bb46b3f50f7d34d4561
# 4
fmy@dockerserever:~$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c0fe3a59a022 nginx "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:8081->80/tcp, :::8081->80/tcp fan-nginx-1
448c9db89f6e hello-world "/hello" 2 days ago Exited (0) 2 days ago beautiful_jepsen
637b1154981f hello-world "/hello" 11 days ago Exited (0) 11 days ago suspicious_jones
# 5
fmy@dockerserever:~$ sudo docker stop fan-nginx-1
fan-nginx-1
fmy@dockerserever:~$ sudo docker ps -a|grep fan-nginx-1
c0fe3a59a022 nginx "/docker-entrypoint.…" 2 minutes ago Exited (0) 25 seconds ago fan-nginx-1
# 6
fmy@dockerserever:~$ sudo docker start fan-nginx-1
fan-nginx-1
fmy@dockerserever:~$ sudo docker ps -a|grep fan-nginx-1
c0fe3a59a022 nginx "/docker-entrypoint.…" 3 minutes ago Up 1 second 0.0.0.0:8081->80/tcp, :::8081->80/tcp fan-nginx-1
# 7
fmy@dockerserever:~$ sudo docker rm fan-nginx-1
# 8
fmy@dockerserever:~$ sudo docker version
# 9
fmy@dockerserever:~$ sudo docker search mongodb