服务器|一文玩转 Docker

Docker 基本命令 镜像:(镜像,从认识上简单的来说,就是面向对象中的类,相当于一个模板。从本质上来说,镜像相当于一个文件系统。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 容器名

服务器|一文玩转 Docker
文章图片

容器中的管理数据主要有两种方式:
数据卷(Data Volumes)
数据卷是宿主机中的一个目录或文件。容器目录与数据卷目录绑定后,对方的绑定会立即同步。一个数据卷可以被多个容器载,一个容器也可以挂载多个数据卷。对数据卷的更新,不会影响镜像。数据卷 默认会一直存在,即使容器被删除。作用:容器数据持久化,外部机器与容器通信,容器之间数据交互。
数据卷容器(Data Volume Containers)
如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器。数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载。
1、Docker 安装
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 images9.设置Docker开机启动 systemctl enable docker

1.1、配置阿里云免费的镜像加速器(阿里云为每个用户配置了不同的镜像加速器,并提供配置教程)
2、About Docker 2.1、Docker 镜像如何制作?
(1).容器转镜像
容器转镜像: docker commit 容器ID 镜像名:版本号镜像转成文件: docker save -o 压缩文件名称 镜像名:版本号文件转成镜像: docker load -i 压缩文件名称

(2).Dockerfile
Dockerfile 是一个文本文件。包含了一条条的指令,每一条指令构建一层,基于基础镜像,最终构建出一个新的镜像。对于开发人员:可以为开发人员提供一个完全一个的开发环境。对于测试人员:可以直接拿开发时构建的镜像或Dockerfile 文件构建一个新的镜像开始工作。对于运维人员:在部署的时候,可以实现应用的无缝移植。
3、使用 Docker 搭建 MySQL 服务 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

【服务器|一文玩转 Docker】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

  • linux命令结尾加了“\”意为将最后的回车换行给注释了,系统理解为命令还没有结束,因而是继续等待用户进行输入,直到读到结束符,如回车。
  • -v:主机和容器的目录映射关系,":"前为主机目录,之后为容器目录。
6.检查容器是否正确运行
docker container ls

  • 可以看到容器ID,容器的源镜像,启动命令,创建时间,状态,端口映射信息,容器名字。
7.连接Mysql
进入docker本地连接mysql客户端
docker exec -it c_mysql /bin/bash mysql -uroot -proot

未完,待持续更新…

    推荐阅读