如何理解docker?
? 通过镜像模版来快速部署和生成相同类型的VM。docker的image也是一个道理,通过不同类型的模版,比如redis镜像、nginx镜像来快速创建出容器。好比复制克隆,只要资源够,想生成多少就多少。生成出新的容器你可以使用,然后到时候你又可以打包成镜像。有了镜像这个功能,为生产提供了很好的打包、迭代、传递方式。容器是由镜像实例化而来,这和我们学习的面向对象的概念十分相似,我们可以把镜像看作类,把容器看作类实例化后的对象。
流程:创建容器—》进入容器—》更新系统容器的软件源—》下载资源(python,django等)—》commit创建上传镜像—》打包压缩新的镜像资源—》上传到线上服务器—》实现共享
先修知识:
service firewalld stop
systemctl disable firewalld
setenforce 0
iptables -L
iptables -L -t nat -n
systemctl start mysql
service mysql status
systemctl enable mysql
service mariadb stop
ss -anplut|grep mysql
systemctl start nginx
yum install lrzsz -y
find / -type s -name "mysql.sock"
mysql -uroot -p -h 192.168.0.8
-p 做端口映射的时候,其实背后就是在iptables里添加DNAT和SNAT策略
docker中镜像(image)的相关操作:
service docker start
docker images [docker image is]
docker search 镜像名
docker pull 镜像名[可指定版本]
docker rmi [docker image rm] 镜像名
docker tag 旧名字 新名字
docker images history 镜像名
docker image inspect 镜像名
docker save -o 压缩包名 镜像名
docker load -i 压缩包名
docker export -o sc-ubuntu2.tar ubuntu-liu-4(新)
静态:存放的镜像: docker save ---》docker load
动态:运行在容器里的镜像:docker export --》docker import
docker的容器操作:
service docker start
service docker stop
docker container ls
docker rm [-f 强制删除]
docker ps -a -q
docker logs myuuu
docker container inspect 容器名
docker container stats 容器名
docker run -dit --name 容器名 镜像资源 /bin/bash
docker exec -it 容器名 /bin/bash
exit 或ctrl+d
docker commit -m '改动信息' -a "作者信息" 容器名 新的镜像名
进阶:
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地址
项目部署:
docker image pull ubunt
docker run -it --name myu ubuntu /bin/bash
apt update
apt install python3-pip
pip3 install django==1.11.11
pip3 list
docker commit mydjango mydjango
docker save -o mydjango.tar mydjango
scp sc-ubuntu.tar root@192.168.0.17:/root
docker load -i mydjango.tar
docker run -dit --name django --network=host /bin/bash
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
docker run -it --name myuu -v ~/zjh:/home ubuntu /bin/bash
例:基于数据卷容器
docker create --name zhu -v /data 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这个卷
docker volume ls
docker volume rm 数据卷
docker volume create sanchuang
docker volume inspect sanchuang
cd /var/lib/docker/volumes/sanchuang/_data/
vim index.html --》welcome to sanchuang
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 [镜像名称]
部署基于192…这个局域网的私有仓库:
docker pull registry
vim deamon.json--->insecure-registries:["私有网址:192.168.132.153:20"]
service docker restart
docker run -d 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]
docker run -dit -p 192.168.153.132:8000:80 nginx
docker run -dit -p --name myn222 192.168.153.132:80:80 nginx
|