一文玩转 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_第1张图片
容器中的管理数据主要有两种方式:
数据卷(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 images

9.设置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

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

未完,待持续更新…

你可能感兴趣的:(服务器,docker,运维,linux)