docker安装 镜像和容器的操作

1 docker 介绍

# 1  虚拟化---》虚拟机,硬件虚拟化
# 2 docker:centos系统--》大约90m
# 3 开源项目,诞生于2013----》17年以后--》两年多的时间
# 4 基于go语言实现的---》docker ce:免费的  docker ee:收费
# 5 轻量级的操作系统虚拟化解决方案
# 6 Docker 的基础是 Linux 容器(LXC)等技术
# 7 用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单
# 8 django写了个项目,
	-部署到服务器---》代码放到服务器--》服务器装python环境(版本)--》django环境(版本)--》mysql(版本)
  -docker部署--》项目做成docker镜像-----》放到服务器---》拉起镜像(容器)---》项目就运行了
  
# 9 虚拟机--》python,mysql,redis,nginx---》虚拟机的大文件,直接copy到新机器上,用虚拟机的软件打开---》跑起来---》就是你之前装好的操作系统

# 10 跟传统虚拟机的比较
# 11 都用同样的docker环境开发:不涉及到版本问题

# 12 解决的问题
	-保证程序运行环境的一致性;
	-降低配置开发环境、生产环境的复杂度和成本;
	-实现程序的快速部署和分发
  
# 13 docker 是一个c/s架构软件(客户端,服务端)
# 14 docker客户端通过restful跟服务端做交互
# 15 服务端:容器,镜像,数据卷,网络

# 16 客服端,服务端,仓库(放了一堆镜像):当客户端发一条命令(拉取redis镜像)---》服务端守护进程接收---》去仓库拿redis镜像,放到服务端本地


# 学docker:就是学一堆命令

3 centos安装docker

# 1  centos7以上
# 2 安装步骤
  -1 sudo yum update # 更新yum源
  -2 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # 安装一些依赖包
  -3 sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 把源设置为阿里云,安装比较快
  -4 sudo yum install docker-ce  # 安装docker-ce
  -5 docker -v    # 查看客户端版本
  -6 docker version  # 客户端和服务端的版本,看不到服务端的版本(服务端没有启动)
  -7 systemctl start docker # 服务端启动
# 3 版本问题:
	老版本:之前没有分docker ce 和docker ee ,17之前是老版本
  新版本:17以后,新版本(操作都不太一样)
  

2 容器和镜像

# 1 类和对象的关系:类可以产生对象,而且可以产生多个对象
# 2 镜像和容器:一个镜像可以运行出多个容器,运行起来的容器:当成虚拟机:centos7+redis
# 3 如果拉取了一个redis镜像:相当于一个linux操作系统上面安装了redis软件
# 4 真正的执行,容器在运行(操作系统+软件)
# 5 镜像:一堆文件,必须要运行起来,成为容器

3 加速配置

# 拉取镜像,是从远程拉的,在国外,速度非常慢,换成国内的镜像:清华,阿里。。。
# 一开始没有:daemon.json 
vi /etc/docker/daemon.json 
# 设置成七牛源(如果启动不了,没有严格按照josn格式,排查一下即可)
{
"registry-mirrors": ["https://reg-mirror.qiniu.com"]
}

# 重启docker服务
systemctl restart docker 

systemctl stop docker  # 停止docker服务
systemctl start docker # 启动docker服务

systemctl status docker # 查看docker状态
systemctl enable docker # 设置成开机启动
docker info  # 查看docker 概要信息

4 镜像操作

#1  镜像查找
docker search 镜像名字  # 在Linux上直接查找本地的镜像,这个不方便拉去使用,直接去https://hub.docker.com/网站上搜索对应版本下载更加方便。

NAME   DESCRIPTION     STARS    OFFICIAL 
镜像名字   描述          start数   是否是官方
# 2 镜像查看(***)
docker images  # 查看本地镜像
REPOSITORY   TAG      IMAGE ID         CREATED             SIZE
redis       latest    f0453552d7f2    2 weeks ago         98.2MB
python      3.6       1daf62e8cab5    4 weeks ago         914MB

# 3 镜像下载pull(****)  # https://hub.docker.com/
docker pull centos:版本号
docker pull centos # 不指定版本号,表示下载最新的,等同于docker pull centos:latest
docker pull centos:7
docker pull centos:centos6.6

# 镜像删除
docker rmi 镜像名字/id号   # 删除镜像时,如果有次镜像创建的容器,要先删除容器才能删除这个镜像。

# 一次性删除所有镜像
docker rmi `docker images -q`  # 这个不要用

docker images -q # 过滤出所有id号

5 容器操作

# 创建并启动(创建(create)  启动(start))
docker run 
创建容器命令:docker run
-i:表示运行容器
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
--name :为创建的容器命名。
-v:数据卷:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

docker run -it --name=mycentos centos:7  # -i -t 两个可以合成一个
   #接下来操作的是mycentos这个容器
   #可以安装软件,它就是一个centos7
   # 你之前拉取的redis的镜像:linux+redis软件
exit 退出容器(在容器内部),退出容器,容器也就停止。
docker run -di --name=mycentos2 centos:7
	# docker run -d -i --name=mycentos2 centos:7	
	# 每个容器都用自己的id号:(创建出来就立即生成)b1eeace155b54e467dfcbc42bb2fa5b580db5463f230a3eae1b27b74de4c597

 docker run -d -i --name=mycentos3 centos  # 如果本地没有最新的centos镜像,自动先去拉取(相当于docker pull centos:latest),然后创建并允许
  
  
 # 启动一个redis容器
docker run -di --name=myredis -p 6379:6379 redis
  # 把本机的reids停掉
  # 端口映射,6378 6379
  
# 用docker 允许一个服务(装一个软件),变得异常简单
	-linux安装redis(源码下载,解压,make & make insall)

# 查看容器  (查看正在运行,查看所有)
查看正在运行的容器
docker ps
查看所有容器
docker ps –a
查看最后一次运行的容器
docker ps –l
查看停止的容器
docker ps -f status=exited
 
# 启动和进入容器
docker exec -it ID/容器名  /bin/bash  # 运行并进入一个已经存在的容器
docker start 容器名/容器ID   # 启动一个已经存在的docker
docker attach 容器名/容器ID(44fc0f0582d9)  # 进入正在运行的容器

# 停止redis服务
docker stop myredis
          
# 删除一个容器
docker rm 容器名  # 运行的容器无法删除,必须先停止再删。如果非要运行时删除,加-f
docker rm -f 容器名   # 容器在运行当中强制删除
docker rm mycentos

一个容器中有多个软件(一般情况下,不要在一个容器里装多个服务)

mysql redis python

centos---》装python--》装mysql--》装redis

redis容器---》装python--》装mysql

6.解决普通用户无法使用docker客户端问题

docker进程使用Unix Socket而不是TCP端口。而默认情况下,Unix socket属于root用户,需要root权限才能访问。
docker守护进程启动的时候,会默认赋予名字为docker的用户组读写Unix socket的权限,因此只要创建docker用户组,并将当前用户加入到docker用户组中,那么当前用户就有权限访问Unix socket了,进而也就可以执行docker相关命令

sudo groupadd docker     #添加docker用户组
sudo gpasswd -a zhang docker     #将登陆用户加入到docker用户组中  # 或 usermod -u 1000 -g zhang -G docker zhang
newgrp docker     #更新用户组
docker ps    #测试docker命令是否可以使用sudo正常使用
posted on 2020-03-31 00:16  jueyuanfengsheng  阅读(482)  评论(0编辑  收藏  举报