爆肝,docker看这篇文章就够了,新手快来!

如何理解docker?

​ 通过镜像模版来快速部署和生成相同类型的VM。docker的image也是一个道理,通过不同类型的模版,比如redis镜像、nginx镜像来快速创建出容器。好比复制克隆,只要资源够,想生成多少就多少。生成出新的容器你可以使用,然后到时候你又可以打包成镜像。有了镜像这个功能,为生产提供了很好的打包、迭代、传递方式。容器是由镜像实例化而来,这和我们学习的面向对象的概念十分相似,我们可以把镜像看作类,把容器看作类实例化后的对象。

流程:创建容器—》进入容器—》更新系统容器的软件源—》下载资源(python,django等)—》commit创建上传镜像—》打包压缩新的镜像资源—》上传到线上服务器—》实现共享

先修知识:

service firewalld stop  # 立马关闭防火墙
systemctl disable firewalld  #设置firewalld开机不启动
setenforce 0   #临时关闭selinux
iptables -L  #重新去添加docker自定义链在iptables里
iptables -L -t nat -n
systemctl start mysql  #启动mysql服务
service mysql status   #查看MySQL的详细信息
systemctl enable mysql  #设置mysql开机启动
service mariadb stop    #关闭mariadb服务
ss -anplut|grep mysql   #查看详细信息
systemctl start nginx   #启动nginx
yum install lrzsz -y  #网页上传图片时要用到
find / -type  s -name "mysql.sock"  # 文件sock只能实现同一台机器上的不同的进程之间通信
mysql -uroot -p -h 192.168.0.8  #连别人机器上的MySQL
#网络socket ip:port可以实现不同机器上的不同的进程之间通信  
-p 做端口映射的时候,其实背后就是在iptables里添加DNAT和SNAT策略

docker中镜像(image)的相关操作:

service docker start  #开启docker服务[stop|retart]
docker images [docker image is]  #查看所有镜像
docker search 镜像名   #查找镜像版本
docker pull 镜像名[可指定版本]  #拉取镜像
docker rmi [docker image rm] 镜像名  #删除镜像
docker tag 旧名字 新名字   #镜像重命名
#docker tag djange_11:latest[版本号] django:latest
#此时会增加一个django的镜像,把原本删除就可以了
docker images history 镜像名  #查看某镜像的历史操作
docker image inspect 镜像名  #查看镜像的详细信息
docker save -o 压缩包名 镜像名  #打包压缩某镜像
#docker save -o ubuntu.tar ubuntu 
#将ubuntu打包压缩成ubuntu.tar
docker load -i 压缩包名  #导入镜像
docker export -o sc-ubuntu2.tar ubuntu-liu-4()  
#导出镜像
	静态:存放的镜像: docker save  ---》docker load
	动态:运行在容器里的镜像:docker export --》docker import
#docker load -i ubuntu.tar
#导入ubuntu.tar这个镜像

docker的容器操作:

service docker start  #开始运行容器
service docker stop   #停止运行容器  (关闭docker,里面的容器都会停止运行)
docker container ls   #查看正在运行的容器【docker ps -a】
docker rm [-f 强制删除]  #删除容器
docker ps -a -q    #获取所有容器的id
#docker rm -f $a  [$(docker ps -a-q)]
docker logs myuuu   #查看日志,为什么没有启动
docker container inspect 容器名     #查看容器详情
docker container stats 容器名  #查看状态信息内容(CPU,内存等)
docker run -dit --name 容器名 镜像资源 /bin/bash  #创建并运行容器
#docker run -it --name myu ubuntu /bin/bash  #创建ubuntu镜像的容器(myu)
#[-d 守护进程模式(后台运行)]、[-it 交互模式]
#[-name 指定容器名,不加系统随机分配][/bin/bash 指定解释器(可运行ls等)]
docker exec -it 容器名 /bin/bash  #交互式进入上面那个守护进程的容器
exit 或ctrl+d  #退出容器  [若是守护进程模式,退出容器仍运行]
docker commit -m '改动信息' -a "作者信息" 容器名 新的镜像名  #将容器打包成新的镜像资源
#-m -a是选项,可省略
#容器的几种状态:up\create\stop

进阶:
docker create --name sc-1 -v /web:/usr/share/nginx/html:ro -p 8081:90 daocloud.io/nginx      #创建一个静态容器
docker run --name sc-nginx-1 -v /web:/usr/share/nginx/html:ro -d -p 8080:80 daocloudi.o/nginx    #创建并启动一个容器
docker run --name sc-mysql-1 -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
    -e  宿主机往容器里传递环境变量  environment
    MYSQL_ROOT_PASSWORD 是变量名
    my-secret-pw 变量的值
mysql -h 192.168.0.17 -uroot -psc123456
    访问容器(可以是其他的机器)
	-h 指定连接服务器的ip地址

项目部署:
流程图
容器的创建与运行
容器的创建与运行
在这里插入图片描述
容器的下载与运行

#我要把我的项目部署在哪个系统上?  Ubuntu
#拉取Ubuntu的镜像资源拉取下来
docker image pull ubunt
#运行一个Ubuntu的容器  使用的是Ubuntu镜像资源
docker run -it --name myu ubuntu /bin/bash
#更新系统容器的软件源
apt update
#安装我们想要的资源【在系统容器中配置项目依赖环境】
apt install python3-pip   #python3的安装工具
#安装django  [基于python上]
pip3 install django==1.11.11
#查看我们安装的所有模块
pip3 list
#将项目文件上传到系统容器中
#将我们部署好的容器压缩成镜像资源
docker commit mydjango mydjango    #[容器名] [镜像资源名(可以起新的名字)]
#进行线上部署,将我们做好的镜像资源打包压缩
docker save -o mydjango.tar mydjango
#将压缩好的文件上传到远程服务器上
#将资源传递到192.168.0.17这台服务器上
scp sc-ubuntu.tar root@192.168.0.17:/root
#运行服务进行解压导入
docker load -i mydjango.tar
#启动
docker run -dit --name django --network=host /bin/bash 
#[--network 指定网络]
#进入容器后台
docker exec -it django /bin/bash

#容器和线上服务器共享网卡信息
#服务在容器中运行的,那我们就可以通过网站访问容器的内容

补充:容器上不了网—》要开启路由功能:

echo 1 >/proc/sys/net/ipv4/ip_forward   #临时开启
vim /etc/sysctl.conf ---》输入:net.ipv4.ip_forward = 1   #永久开启
service docker  restart  重启docker ,会到iptables里去添加相关规则  

数据卷:将宿主机的某个目录,映射到容器中,作为数据储存,我们就可以对宿主机的数据进行储存

docker run --help     [-v 共享一个数据卷]
docker volume ls   #查看所有卷
docker volume inspect 容器名字    #查看某卷的详细信息【路径】
/var/lib/docker/volumes  #存放所有数据卷的文件

例:这个例子中zjh就是一个数据卷
#先创建一个目录
mkdir zjh   #把这个作为映射目录
docker run -it -v ~/zjh:/home ubuntu /bin/bash #将~下的zjh映射到/home
#此时创建完毕,在另一个终端对zjh进行操作,容器这边也会相应改变,反之~
docker run -it --name myuu -v ~/zjh:/home ubuntu /bin/bash #映射到另外一个容器

例:基于数据卷容器
#先创建一个模板容器,并在容器中的根目录下创建文件
docker create --name zhu -v /data ubuntu #这个模板容器说在Ubuntu条件下创建的
#使用这个容器
docker run -it --volumes-from zhu --name myaaa.1 ubuntu /bin/bash
docker run -it --volumes-from zhu --name myaaa.2 ubuntu /bin/bash

docker run -d   --name fan-nginx-1   --mount source=sc,target=/usr/share/nginx/html -p 7790:80   nginx:latest

docker run -itd --name [容器名字] -v [宿主机目录]:[容器目录] [镜像名称] [命令(可选)]
docker create -v [容器数据卷目录] --name [容器名字] [镜像名称] [命令(可选)]

练习:

​ 1.创建一个卷: sanchuang,在sanchuang卷里创建一个index.html首页文件,内容welcome to sanchuang
​ 2.创建2个容器名字自己定义:rose-1 rose-2,启动nginx,使用sanchuang这个卷

#创建卷,并且往卷里新建文件index.html
docker volume ls  #查看数据卷和数据卷容器
docker volume rm 数据卷  #删除数据卷
docker volume create sanchuang   #创建sanchuang卷
docker volume inspect sanchuang  #查看卷的详细信息
 #"Labels": {},
 #"Mountpoint": "/var/lib/docker/volumes/sanchuang/_data",
 #"Name": "sanchuang",
cd /var/lib/docker/volumes/sanchuang/_data/   #进入数据卷
vim index.html   --》welcome to sanchuang #创建一个index.html首页文件
docker run -d --name rose-nginx-1 -p 6688:80 --mount source=sanchuang,target=/usr/share/nginx/html nginx   #启动第一个容器使用卷
docker run -d --name rose-nginx-2 -p 6689:80 --mount source=sanchuang,target=/usr/share/nginx/html nginx   #启用第二个容器使用卷
docker ps   #查看进程

docker仓库

Docker的仓库有三大类:

公有仓库:Docker hub、Docker cloud、等

私有仓库:registry、harbor等

本地仓库:在当前主机存储镜像的地方

和仓库相关的命令

​ docker login [仓库名称]

​ docker pull [镜像名称]

​ docker push [镜像名称]

​ docker search [镜像名称]
实施方案

#下载镜像
docker pull redis
#启动容器
docker -d -p 5000:2233 regidtry
#检查容器效果
curl  ip地址:端口号
#查看容器内部运行
docker top
#重启docker服务
systemctl restart docker
systemctl status docker

**部署基于192...这个局域网的私有仓库**:

```python
#将网络改为桥接模式
#下载私有仓库registry这个镜像资源
docker pull registry 
#切换到root目录下(su root)
#进入/ect/docker/打开daemon.json这个文件
vim deamon.json--->insecure-registries:["私有网址:192.168.132.153:20"]
#重启docker服务
service docker restart
docker run -d myuuu   #运行私有仓库myuuu
docker tag ubuntu 192.168.132.153:20/ubuntu   #重命名
docker push 192.168.132.153:20/ubuntu   #上传资源
docker pull 192.168.132.153:20/ubuntu   #拉取资源

端口映射:要有映射端口才能上网,网址才能打开

桥接模式:同一个局域网可以相互通信

docker run -dit -P --name myn111 nginx  [-P 随机分配IP地址和端口]
docker run -dit -p 8000:80 --name mybbb nginx [-p 指定8000端口映射到80]
#此时网址要指定端口:8000
docker run -dit -p 192.168.153.132:8000:80 nginx   #按照指定IP进行映射
docker run -dit -p --name myn222 192.168.153.132:80:80 nginx    #此时不用特意指定端口号了  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值