docker
##下载安装wget以防万一本机没有wget命令 [root@localhost ~]# yum -y install wget ##切换目录到本地yum源地址 [root@localhost ~]# cd /etc/yum.repos.d ##创建一个文件 [root@localhost yum.repos.d]# mkdir back ##将所有.repo文件转移到刚创建的目录下 [root@localhost yum.repos.d]# mv *.repo back ##自己ls 看一下是否清除 ###下载aliyun的yum源(更换主yum源为国内的阿里云yum源) [root@linux-server yum.repos.d]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo ##参数解释 curl -o 指定存放路径 ##(知识拓展下面一条为扩展源) wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo 安装扩展源--epel.repo [root@localhost ~]# wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo ##进入到yum源地址进性查看 [root@localhost ~]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# ls CentOS-Base.repo epel.repo (安装成功)
安装步骤:
如果之前下载过则先执行:
# yum remove docker docker-common docker-selinux docker-engine # rm -rf /var/lib/docker
以下为正式安装步骤:
sudo yum update #更新yum源 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 #安装各种所需要的包 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #阿里云的docker仓库 sudo yum install docker-ce #安装docker docker -v
启动docker:
systemctl start docker
systemctl stop docker
systemctl status docker #查看状态
docker 是一个cs架构软件
s端:服务端
只是现在c和s都在同一台机器上
镜像(Images):一堆文件,当成虚拟机上有个iso文件,操作系统的文件(centos7.iso,windows10.iso)
镜像从哪里来?是从远程仓库拉取下来的
容器(containers)
镜像运行,得到容器,以后把容器当成一个可以使用的操作系统即可
一个镜像可以运行得到多个容器(镜像和容器的关系:相当于类和对象的关系,一个类可以有多个对象,每个对象都是独立的个体)
远程仓库(registry):
放着一个个镜像--》一堆文件
远程仓库在国外[python 下第三方模块:pypi上---》配置国内镜像站]
使用国内源,下载镜像时,速度会快---》阿里云
参照阿里云提供的笔记做:https://cr.console.aliyun.com/cn-shanghai/instances/mirrors
sudo mkdir -p /etc/docker # 如果有,就不需要创建了 yum install vim -y #安装vim vim /etc/docker/daemon.json # 加入 { "registry-mirrors": ["看自己的阿里云"] } # 保存退出 sudo systemctl daemon-reload # 重新加载docker配置 sudo systemctl restart docker# 重启docker
国外docker 仓库:
搜到后--》下载到本地
docker pull centos:centos7
1、查找镜像
使用命令:基本不用 docker search 名字
2、下载镜像
docker pull 镜像名:版本号 # 官方有的的才能下下来,没有的找不到 docker pull 镜像名 # 如果不写版本号,下最新 docker pull mysql:5.7 docker pull redis
3、查看本地镜像
docker images # 等同于 docker image ls 镜像名字 镜像标签 镜像id,以后通过id操作 REPOSITORY TAG IMAGE ID(后期根据id号操作镜像) CREATED SIZE centos centos7 eeb6ee3f44bd 2 years ago 204MB
4、删除本地镜像
docker rmi 7614ae94 # 等同于docker image rm 7614ae9453d1 docker rmi id号 id号
#
docker rmi docker images -q
#反引号
总结:
镜像是一堆文件---》有的叫redis,有的叫centos
就把镜像当成一个操作系统内装了某个软件,运行成容器,就相当于这个操作系统上装了某个软件
容器基本操作
把镜像运行成容器,并且一个镜像,可以运行出多个容器
查看正在运行的容器
docker ps
查看所有容器
docker ps -a
查看最后一次运行的容器
docker ps -l
启动停止的容器
docker start id/名字
停止运行的容器
docker stop id/名字
停止所有在运行的容器
docker stop `docker ps -q`
一次性删除所有容器
docker rm `docker ps -a -q`
记住四条
docker ps
docker ps -a
docker start
docker stop
run运行容器
docker run 把镜像运行成容器
docker run 参数
-i 表示运行容器
-d 以守护式容器在后台运行,用这个参数创造出来的容器,命令行还在宿主机上,没有进入到容器内部
-t 表示容器启动后会进入容器命令行。加入这参数后,容器创建就能登录进去。即分配一个伪终端。
--name 指定容器名字,如果不指定,会随机一个名字
-p 表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
· -v 表示目录映射关系(前者是宿主机目录,后者是容器的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上
1:案例 -id
docker run -id --name=centos centos:7 执行完,命令在宿主机上,可以通过命令查看正在运行的的容器
2:案例 -it
docker run -it --name=centos centos:7 执行完,命令行在容器内,容器很干净,几乎没啥软件,可以exit退出到宿主机,只要退出,容器就停了
3:创建一个python3.9容器,不进入
docker run -id --name=python python:3.9
4:重点
如果创建容器并进入,只要退出,容器就停了
容器要运行,必须有一个前台进程在运行,兵器人是夯住的,也就是阻塞住的,否则容器就停了
5:进入容器内部
在容器内执行命令
docker exec 容器名字/id 命令
利用这个特性,进入容器内部
docker exec -it 容器名字/id /bin/bash (/bin/bash 是LINUX中执行SHELL命令的格式)
docker exec -it python sh
exit
-v目录映射
运行出一个centos77容器,不进入,做目录映射
把宿主机的/root/qx文件夹 映射到容器内部的 /qx文件夹
-v可以写多个,可以是文件或者文件夹
docker run -id -v /root/qx:/qx --name=centos77 centos:7
容器内部修改文件,会影响外部
外部修改文件,影响内部
目录映射好处是,后期咱们部署django项目
1 有个django容器,做好映射,代码放在宿主机上即可,以后更新了代码,只要重启容器,代码就是最新了
2 运行mysql容器---》mysql配置文件放在宿主机上做好映射
mysql容器---》表数据,放到容器中---》如果删了容器---》数据库全没了
表数据,放在宿主机上---》把容器删除---》表数据还在----》再启动一个容器做好映射---》数据都还在
容器其他操作
启动容器
docker start 容器id
停止容器
docker stop 容器id
mysql的容器底层的操系统是debian装软件需要用
apt -get update
apt -get install vim -y
文件拷贝(宿主机执行)
容器的文件copy到宿主机上,不是容器内执行
docker cp 容器名称:容器目录 需要拷贝的文件或目录
docker cp ae1759ad935:/lqz/xx.txt /root/xx.txt
宿主机的文件copy到容器里
docker cp 需要拷贝的文件或目录 容器名称:容器目录
docker cp /root/yy.txt ae1759ad935:/lqz/yy.txt
查看容器ip地址
docker inspect 容器名称 # 查看容器的详细描述,很多
docker inspect ae1759ad935 --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
在多个容器之间是可以ping通的(容器和宿主机也可以)
centos:172.17.0.3
mysql:172.17.0.2
删除容器(删除已停止容器)
docker rm 容器id
docker rm `docker ps -a -q`
无状态的服务(在容器中尽量运行无状态的服务)
musql redis 有状态,运行过程中产生数据,保存,容器删除,数据就没了
uwsgi+django 无状态的服务
应用部署
mysql部署
docker中部署mysql,可靠的,以后不需要在宿主机上装mysql
1、 没有做目录映射---》配置文件--》表数据都在容器中---》一旦删除--》所有都没了
docker run -di --name=mysql -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
2、做目录和端口映射
做目录映射:data文件,配置文件
创建文件夹
mkdir /mysql
mkdir /mysql/conf.d
mkdir /mysql/data/
vim /mysql/my.cnf
[client]
default-character-set=utf8
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
secure_file_priv=/var/lib/mysql
expire_logs_days=7
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
max_connections=1000
docker run -di -v /mysql/data/:/var/lib/mysql -v /mysql/conf.d:/etc/mysql/conf.d -v /mysql/my.cnf:/etc/mysql/my.cnf -p 3307:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
创建库,创建表,插入数据
关闭容器,删除容器,myslq的容器没了,但是数据在宿主机上放着
docker stop mysql2
docker rm mysql2
docker rm mysql -f 容器删了
再运行起一个容器,做好目录映射,数据都回来了
docker run -di -v /mysql/data/:/var/lib/mysql -v /mysql/conf.d:/etc/mysql/conf.d -v /mysql/my.cnf:/etc/mysql/my.cnf -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7
docker pull redis
mkdir /root/data
vim /root/redis.conf
bind 0.0.0.0
daemonize NO
protected-mode yes
requirepass 123456
运行
docker run -id -p 6379:6379 --name redis -v /root/redis.conf:/etc/redis/redis.conf -v /root/data:/data redis redis-server /etc/redis/redis.conf
在容器运行时,可以自己定制运行命名
远程链接redis操作
docker run -id --name nginx1 -p 8088:80 -v /root/html:/usr/share/nginx/html nginx
# 以后只需要修改宿主机的/root/html 路径,看到页面就是修改后的
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析