镜像:(镜像,从认识上简单的来说,就是面向对象中的类,相当于一个模板。从本质上来说,镜像相当于一个文件系统。Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。)
查看本地所有镜像:
docker images
docker images -q # 查看所用镜像ID
查找镜像:
docker search Redis
拉取镜像:
docker pull Redis:5.0 # 不指定版本默认为最新,查找版本可以去 https://hub.docker.com/
删除镜像:
docker rmi 镜像ID # 删除指定镜像
docker rmi `docker images -q` # 删除所有镜像
docker文件创建镜像:
docker build -t 【image name】
镜像标签:
docker tage 【image ID】【image name】
更新镜像:启动镜像后
apt-get update
容器:(容器,从认识上来说,就是类创建的实例,就是依据镜像这个模板创建出来的实体。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。)
查看正在运行的容器:
docker ps
查看所有容器:
docker ps -a
构建容器:
docker run -it 【镜像ID】 /bin/bash
docker run -it --name mycentos docker.io/centos:7 /bin/bash
参数说明:
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-d: 守护(后台)模式运行容器,并返回容器ID;需要使用docker.exec进入容器,退出后,容器不会关闭;
-it: 创建的容器一般为交互式容器;
-id: 创建的容器一般为守护式容器;
--name="nginx-lb": 为容器指定一个名称。
运行一个在后台执行的容器,同时,还能用控制台管理:
docker run -it -d ubuntu:latest
运行一个带命令在后台不断执行的容器,不直接展示容器内部信息:
docker run -d ubuntu:latest ping www.docker.com
运行一个在后台不断执行的容器,同时带有命令,程序被终止后还能重启继续跑,还能用控制台管理:
docker run -d --restart=always ubuntu:latest ping www.docker.com
为容器指定一个名字:
docker run -d --name=ubuntu_server ubuntu:latest
容器暴露80端口,并指定宿主机80端口与其通信(之前是宿主机端口,之后是容器需暴露的端口):
docker run -d --name=ubuntu_server -p 80:80 ubuntu:latest
指定容器内目录与宿主机目录共享(之前是宿主机文件夹,之后是容器需共享的文件夹):
docker run -d --name=ubuntu_server -v /etc/www:/var/www ubuntu:latest
启动容器:
docker start 容器ID
docker start 容器名
进入容器: # 退出容器,容器不会关闭
docker exec -it 容器ID /bin/bash
docker exec -it 容器名 /bin/bash
停止容器:
docker stop 容器ID
docker stop 容器名
重命名:
docker rename 原容器名 新容器名
删除容器:# 如果容器删除失败,需要先停止,才能删除
docker rm 容器ID
docker rm 容器名
docker rm `docker ps -aq`
查看容器信息:
docker inspect 容器名
容器中的管理数据主要有两种方式:
数据卷(Data Volumes)
数据卷是宿主机中的一个目录或文件。容器目录与数据卷目录绑定后,对方的绑定会立即同步。一个数据卷可以被多个容器载,一个容器也可以挂载多个数据卷。对数据卷的更新,不会影响镜像。数据卷 默认会一直存在,即使容器被删除。作用:容器数据持久化,外部机器与容器通信,容器之间数据交互。
数据卷容器(Data Volume Containers)
如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载。
1.更新apt包索引
yum update
2.安装一些必要的系统工具:
yum install -y yum-utils device-mapper-persistent-data lvm2
3.添加软件源信息:
yum -y install yum-utils #安装yum-config-manager命令对应工具
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4.更新 yum 缓存:
yum makecache fast
5.安装 Docker-ce:
yum -y install docker-ce
6.启动 Docker 后台服务
systemctl start docker
7.测试运行 hello-world
docker run hello-world
由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行。
8.查看docker的镜像
docker images
9.设置Docker开机启动
systemctl enable docker
1.1、配置阿里云免费的镜像加速器(阿里云为每个用户配置了不同的镜像加速器,并提供配置教程)
2.1、Docker 镜像如何制作?
(1).容器转镜像
容器转镜像:
docker commit 容器ID 镜像名:版本号
镜像转成文件:
docker save -o 压缩文件名称 镜像名:版本号
文件转成镜像:
docker load -i 压缩文件名称
(2).Dockerfile
Dockerfile 是一个文本文件。包含了一条条的指令,每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像。对于开发人员:可以为开发人员提供一个完全一个的开发环境。对于测试人员:可以直接拿开发时构建的镜像或Dockerfile 文件构建一个新的镜像开始工作。对于运维人员:在部署的时候,可以实现应用的无缝移植。
1.拉取官方镜像(我们这里选择5.7,如果不写后面的版本号则会自动拉取最新版)
docker pull mysql:5.7 # 拉取 mysql 5.7
docker pull mysql # 拉取最新版mysql镜像
2.检查是否拉取成功
docker images
3.创建Mysql目录
cd /opt # 具体路径可根据自我喜好
mkdir mysql
cd mysql
4.一般来说数据库容器不需要建立目录映射
docker run -p 3306:3306 --name c_mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
- –name:容器名,此处命名为c_mysql
- -e:配置信息,此处配置c_mysql的root用户的登陆密码
- -p:端口映射,此处映射 主机3306端口 到 容器的3306端口
- -d:源镜像名,此处为 mysql:5.7
5.如果要建立目录映射($PWD表示当前路径,\表示换行输入)
docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/conf:/etc/mysql \
-v /mydata/mysql/logs:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7
6.检查容器是否正确运行
docker container ls
7.连接Mysql
进入docker本地连接mysql客户端
docker exec -it c_mysql /bin/bash
mysql -uroot -proot
未完,待持续更新…