docker基础二

三.Docker操作

linux上不能运行windows系统的容器(可运行win的虚拟机),因内核不同。(centos,ubuntu等都是linux内核)

注:不能直接跨平台运行容器,因为容器只是一个进程,用的还是宿主机的内核

1.认识

Docker可理解为手机中的应用市场,当我们yum install -y docker-ce下载好应用市场,里面是没有软件的,需要docker pull 从远方仓库下载指定的软件(镜像),假如我们下载好centos镜像,然后需要进入此容器yum下载相应的例如python解释器、django等,然后将此打包,然后其他人可用

2.安装

1.安装好Docker

1.安装docker源
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2.安装docker
yum install -y docker-ce

2.配置加速器(从仓库中拉取镜像需要),常见 的有 阿里云加速器、DaoCloud 加速器、灵雀云加速器等

curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io

会生成/etc/docker/daemon.json文件(如果速度慢更换源: https://docker.mirrors.ustc.edu.cn/

如果有错误发生,需要修改docker的配置文件,删除一个逗号:

vim /etc/docker/daemon.json

3.重启docker

sudo systemctl daemon-reload
sudo systemctl restart docker
systemctl status docker #查看docker状态

二.Docker三大概念

1100338-20181014202945937-1677031749

如图我们清晰可知:镜像是从仓库中pull下来的,我们使用run命令进入镜像对应的容器,然后在容器内进行一系列操作(如yum install vim,pip install django等),然后使用commit命令将容器打包成新的镜像,其他人如果要用此镜像,直接发给对方即可,或者将其发布到仓库中,对方从仓库中下载

1.镜像(image)

1.1概念

1.Docker镜像就是一个只读的模板,是一个静态的东西。
2.镜像可以用来创建Docker容器。
3.因为镜像包含完整的root文件系统,体积是非常庞大的,因此docker在设计时按照Union FS的技术,将其设计为分层存储的架构。
4.镜像不是ISO那种完整的打包文件,镜像只是一个虚拟的概念,他不是一个完整的文件,而是由一组文件组成,或者多组文件系统联合组成。

1.2 相关命令

从仓库搜索centos相关的镜像

docker search centos  

查看机器上的所有镜像

docker image ls/docker images  

修改docker镜像的名字

docker tag 镜像id    新的镜像名  

获取镜像

docker pull centos  #获取centos镜像

运行镜像,生成容器并且检测镜像是否存在,不存在自动docker Pull,只会运行一下就退出,可用docker ps -a命令查看

docker run 镜像id/镜像名  

删除镜像

docker   rmi  镜像id前三位即可 #删除镜像,必须清除所有的容器记录依赖 
docker rmi  `docker images -aq`  #批量删除镜像记录 

2.容器(container)

2.1概念

1.image和container的关系,就像面向对象程序设计中的 类和实例一样,镜像是静态的定义(class),容器是镜像的运行状态。也就好比程序和进程的关系:我们可以在程序内进行各种修改操作,然后将其运行为进程,对于进程我们可以创建、启动、停止、删除、暂停。将程序打包发送给另一台电脑,另一台电脑也可启动为进程。
2.容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的,保证安全的平台。


2.2 相关命令

1.运行、关闭容器

run是启动一个新的容器,并且运行

docker run -it centos /bin/bash  #/bin/bash是默认启动命令,可用nginx -g daemon of,如下图
cat /etc/os-release  #进入容器之后查看发行版
#如果想要此容器在后台运行,退回到宿主机:
ctrl+p+q 

attach是进入一个死的容器,退出该容器也关闭

#进入容器前先docker start 容器id
docker container attach 容器id/容器名

exec是进入一个运行中的容器,退出时该容器不会关闭

docker exec -it 容器id /bin/bash

启动、关闭容器(如果容器中没有进程,只是闪一下子)

docker container stop 容器id/容器名 
docker container start 容器id/容器名

交互式容器的关闭和启动

docker container start -i 容器id/容器名

2.端口映射
docker run -d -p 8090:5000 training/webapp python app.py
	#-d 后台运行  
	#-p 指定端口映射   宿主机的 8090映射到容器内的5000 (宿主机的端口你可以自由定义,容器的端口根据代码决定)
	#-P 随机端口映射 ,宿主机会随机生成一个端口,映射到容器的5000(映射请情况可使用docker ps查看)

容器运行之后,可用iptables -t nat -L -n查看端口映射

查看docker的端口转发情况

docker port 容器id 

4.容器命名
docker run --name 名字 -d centos /bin/sh -c "while true;do echo 你看这个灯,它又大又亮; sleep 1;done"

5.查看容器
docker ps #查看正在运行的docker容器(正在运行的容器中必须有一个进程在运行,才不会挂掉)
docker ps -a #查看所有运行过的容器(挂掉的和正在运行的)

查看容器的详细信息

docker container inspect 容器id

查看容器日志

docker logs 容器id/容器名   #查看容器内所有日志
docker logs -f 容器id #实时刷新查看容器内的日志

6.导入导出

进入centos容器内,且修改容器内的信息,然后提交为新的镜像

docker run -it centos /bin/bash
yum install vim  #然后下载一个vim
exit #退出容器
docker commit 容器id 新的镜像名:v1 #将此容器提交到本地,为新的镜像(冒号+版本)
docker save 镜像id > xx.tar.gz #导出本地的docker镜像
docker load < xx.tar.gz #加载docker镜像文件到本地

7.删除容器
docker rm   容器id  #删除容器记录,必须是挂掉的记录才能删除 
docker rm  `docker ps -aq`  #批量删除容器记录  

8.宿主机和容器复制数据

docker cp用于宿主机和容器之间的数据复制

# 主机文件--》宿主机
docker cp /www/runoob 96f7f14e99ab:/www/
# 宿主机文件--》主机
docker cp  96f7f14e99ab:/www /tmp/

9.数据卷挂载

docker只是提供了一个运行环境,要想让一个容器重复利用,需要用到数据卷(这样我们只用在宿主机中改代码即可,容器也不用重启)

1.docker run -d -p 80:81 -v 宿主机项目目录/文件:容器项目目录/文件  镜像名 #挂载已存在的宿主目录(跟数据卷无关)
2.docker run -d -p 90:81 -v 容器目录/文件 镜像名   #生成一个随机名称的数据卷
3.docker run -d -p 91:81 -v 卷名别名:容器目录  #生成卷名别名
4.docker run -d -p 92:81 --volumes-from 容器id #使用某容器id的挂载卷(不会产生新卷)
#使用docker volume ls 查看存在的数据卷
#生成数据卷在/var/lib/docker/volumes下
#使用docker inspect 容器名 来查看mounts对应的数据卷名

10.卸载docker
1、查询docker安装过的包:
yum list installed | grep docker
2、删除安装包:
yum remove docker-ce.x86_64 ddocker-ce-cli.x86_64 -y
3、删除镜像/容器等
rm -rf /var/lib/docker

3.仓库(repository)

3.1概念

docker仓库(repository)

1.仓库是集中存放镜像文件的场所。
2.仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
3.最大的公开仓库是Docker Hub,国内的公开仓库包括Docker Pool等
4.当用户创建了自己的镜像之后就可以使用push命令将它上传到公有或者私有仓库,这样下载在另外一台机器上使用这个镜像时候,只需需要从仓库上pull下来就可以了。

docker仓库注册服务器(registry)

1.有时候把仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
2.国内的一些云服务商提供了针 对 Docker Hub 的镜像服务(Registry Mirror),这些镜像服务被称为加速器。常见 的有 阿里云加速器、DaoCloud 加速器、灵雀云加速器等。
使用加速器会直接从国内的地址下载 Docker Hub 的镜像,比直接从官方网站下载速度会提高很多。

三.Dockerfile

1.认识

Dockerfile 是自动构建 docker 镜像的配置文件, 用户可以使用 Dockerfile 快速创建自定义的镜像。我们可以去使用 Dockerfile 定义镜像,依赖镜像来运行容器

Dockerfile一般分为四部分:

基础镜像(父镜像)指令 FROM
维护者信息指令 MAINTAINER
镜像操作指令 RUN、EVN、ADD、WORKDIR等
容器启动指令CMD、ENTRYPOINT和USER等

1610873222448

2.例子

一段简单的Dockerfile例子:

FROM python:2.7  #从 Docker Hub 上 pull 下 python 2.7 的基础镜像
MAINTAINER Angel_Kitty <angelkitty6698@gmail.com> #显示维护者的信息
ADD hello / #本地的hello可执行文件拷贝到镜像的/目录
WORKDIR /app   #当进入容器就在此目录下
RUN pip install -r requirements.txt #安装依赖包
EXPOSE 5000 # 相当于-P 宿主机随机端口映射到容器5000端口
ENTRYPOINT ["python"] #启动app
CMD ["app.py"]


dockerfile写完之后,通过命令docker ps -t 镜像名 .,会自动找到当前文件夹下的dockerfile文件进行构造

3.构造基础镜像

什么是基础镜像,像centos,ailplane,unbutun等

我们进入清华大学镜像网站: https://mirrors.tuna.tsinghua.edu.cn ,搜lxc(linux container),进入lxc-images界面,找到最小的镜像,使用wget下载下来(此镜像只是centos第一层目录):

https://mirrors.tuna.tsinghua.edu.cn/lxc-images/images/centos/7/amd64/default/20210114_07%3A08/rootfs.tar.xz

同目录新建dockerfile文件:

FROM scratch
ADD rootfs.tar.xz /   #ADD命令会解压tar
CMD ['/bin/sh']

构造(docker built -t 镜像名:版本号)好之后进入镜像

docker run -i -t 镜像名:版本号 /bin/sh

四.docker分层

docker的镜像是由一层一层构成的,所有的镜像都公用同一分层,什么意思呢?假如镜像A使用了centos7基础镜像,镜像B也使用了这个基础镜像,那么这个centos基础镜像也是只有一份(作为单一层实现),我们可以使用docker images查看所有镜像,计算其总大小假如为4G,但是当我们去/var/lib/docker/images下面看的时候,使用du -sh,其大小肯定是小于4G的,这是因为所有的分层都是单一存放在这里的。

分层的概念也如下:当我们导入一个镜像的时候,可看到进度条,每个进度条就是一个分层

每commit一次,都会产生一个新层(每一层都会有一个parentid,指向父层)

五.docker-compose编排工具

1.是什么?---- 负责管理单机版的容器之间的通信或者对其进行批量管理

2.为什么?---- 对于不同容器,如果我们想要批量操作,就需要用到编排工具

3.怎么用?

1.安装

yum install docker-compose -y (需要epel源)

2.yam文件

version:docker-compose版本
mysql-server:起来的容器名称
restart:
    #always 开机重启服务

3.命令

docker-compose up -d
docker-compose down

六.django,mysql通信

django和mysql各自构建镜像,mysql镜像构造好之后,启动镜像(此时的密码为root账户数据库密码)

docker run --name 容器名称 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 镜像名称

启动之后,可通过命令docker exec -it 容器名称 /bin/bash进入,再mysql -u root -p进入

django项目和mysql通过内网关联ip进行通信,通过下面命令查看其容器各自ip

 docker network inspect bridge 

posted @ 2023-02-26 11:03  MISF  阅读(7)  评论(0编辑  收藏  举报
     JS过度和变形效果演示   
  
    html5.png