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         (安装成功)

 

docker安装和配置

安装步骤:

如果之前下载过则先执行:

# 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中的一些概念

docker 是一个cs架构软件

  c端:客户端

  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 仓库:

https://hub.docker.com/

 

搜索想要找的镜像,找到固定版本

搜到后--》下载到本地

docker pull centos:centos7

 

镜像操作

1、查找镜像

https://hub.docker.com/直接搜

使用命令:基本不用 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 images -q # 查询本地所有镜像,只列出 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 

redis部署

拉取redis镜像

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操作

 

nginx部署

拉取nginx镜像

docker pull nginx

run起容器

docker run -id --name nginx -p 80:80 nginx

/usr/share/nginx/html

docker run -id --name nginx1 -p 8088:80 -v /root/html:/usr/share/nginx/html nginx
# 以后只需要修改宿主机的/root/html 路径,看到页面就是修改后的

posted @ 2024-01-21 21:04  别管鱼油我了  阅读(1)  评论(0编辑  收藏  举报