linux学习-DAY4-Docker

Docker

Docker 的优点

  • 提供简单轻量的建模方式
  • 职责的逻辑分离
  • 快速高效的生命周期
  • 鼓励使用面向服务的架构

Docker 的组成

  • Docker C/S结构

    ​ Docker是C/S(客户端client-服务器server)架构模式。
    docker通过客户端连接守护进程,通过命令向守护进程发出请求,守护进程通过一系列的操作返回结果。
    docker客户端可以连接本地或者远程的守护进程。

  • Docker Image镜像

    ​ 镜像是容器的基石,容器基于镜像启动和运行。镜像就好像容器的源代码,保存了容器各种启动的条件。镜像是一个层叠的只读文件系统。

  • Docker container容器

    ​ 容器通过镜像来启动,容器是docker的执行来源,可以执行一个或多个进程。镜像相当于构建和打包阶段,容器相当于启动和执行阶段。容器启动时,Docker容器可以运行、开始、停止、移动和删除。每一个Docker容器都是独立和安全的应用平台。

    ​ 要注意的是,由于容器是基于镜像的,所以不管对容器怎样的操作,一旦容器重启,一切都会变成最开始的样子。

  • Docker registry 仓库

    ​ docker仓库用来保存镜像。docker仓库分为公有和私有。docker公司提供公有仓库docker hub,网址:https://hub.docker.com/。我们也可以创建自己私有的仓库。

一、安装

# 1.配置源
curl  http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo
    
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo


# 2.下载docker
yum install -y yum-utils device-mapper-persistent-data lvm2
yum list docker-ce.x86_64 --showduplicates | sort -r
yum install -y --setopt=obsoletes=0 
docker-ce-17.03.2.ce-1.el7.centos.x86_64 
docker-ce-selinux-17.03.2.ce-1.el7.centos.noarch

# 3.启动docker
systemctl daemon-reload
systemctl restart docker
systemctl enable docker
# 优化镜像的安装
mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'
{
   "registry-mirrors": ["https://68rmyzg7.mirror.aliyuncs.com"]
}
EOF	  

二、镜像

1.基本使用

# 1.获取镜像
	# 查询远程仓库中的centos
	docker search centos
    
    # 下载镜像(服务、系统)
	docker pull centos:6.9
	docker pull centos:7.5.1804
	docker pull nginx
    
# 2.查询镜像
	# 查询拥有的镜像
	docker images
    # 显示所拥有的镜像的ID
	docker images -q 
    # 通过镜像ID或者镜像名加标签查询镜像,并显示详细信息
	docker inspect ID/name:tag
        
# 3.删除镜像
	# 根据ID删除镜像
	docker rmi  ID 
    # 查询所有镜像ID并删除
	docker rmi `docker images -q`
	docker rmi $(docker images -q)
	
# 4.导入导出镜像
	# 导出
	docker image save nginx >/opt/nginx.tar.gz
    # 导入
	docker image load -i /opt/nginx.tar.gz
	
# 5.启动容器并获取镜像
	docker  run -d -p 80:80 httpd
    docker  run -it --name "test" centos:6.9
    # -d: 后台运行容器,并返回容器ID;
    # -p: 端口映射,格式为:主机(宿主)端口:容器端口;
    # -i: 以交互模式运行容器,通常与 -t 同时使用;
    # -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
    # --name="nginx-lb": 为容器指定一个名称;
    # httpd/centos6.9:可以根据镜像名或镜像ID来启动镜像

2.制作镜像

语法

docker commit xxxxxx oldguo/wordpress:v1
# xxxxxx:拥有的镜像名/镜像ID
# oldguo/wordpress:制作的镜像名
# v1:制作的镜像标签

# 为何要制作镜像
# 比如我对centos7.5添加了一些软件,然后不想每次都启动原始的centos7.5,都要再添加一次软件,所以,可以把添加软件后的centos7.5制作成一个镜像,然后启动这个镜像就行

制作镜像: centos7.5+vim+net-tools+iproute+sshd

# 1.启动新容器
docker run -it --name "centos7.5" 76d6bc25b8a5

# 2.优化yum源
mv /etc/yum.repos.d/*.repo /tmpecho -e "[ftp]
name=ftp
baseurl=ftp://10.0.0.100/pub/centos7
gpgcheck=0">/etc/yum.repos.d/ftp.repo

# 3. 安装必须软件包
yum install -y vim net-tools iproute openssh-*   -y

# 4.启动SSHD
mkdir /var/run/sshd
echo 'UseDNS no' >> /etc/ssh/sshd_config
sed -i -e '/pam_loginuid.so/d' /etc/pam.d/sshd
echo 'root:123456' | chpasswd
# 分配公钥
/usr/bin/ssh-keygen -A
/usr/sbin/sshd -D 
 
 
 # 注意: 以上操作做完之后,会一直不退出,需要用以下命令退回到宿主机,并不关闭容器   ctrl+p+q

# 5.制作镜像,以便日后使用
docker commit centos7.5 oldguo/centos7_sshd:v2

3.dockerfile

# dockerfile 可以快速创建一个镜像
# 我们就使用dockerfile来快速创建一个centos7.5+vim+net-tools+iproute+sshd的镜像

# 1.创建一个dockerfile文件
vim  dockerfile 
# 2.输入内容
FROM centos:7.5.1804
RUN mv /etc/yum.repos.d/*.repo /tmp
RUN echo -e "[ftp]
name=ftp
baseurl=ftp://10.0.0.100/pub/centos7
gpgcheck=0">/etc/yum.repos.d/ftp.repo
RUN yum install -y openssh-server
RUN yum install -y openssh-clients
RUN yum install net-tools* -y
RUN yum install iproute-* -y
RUN mkdir /var/run/sshd
RUN echo 'UseDNS no' >> /etc/ssh/sshd_config
RUN sed -i -e '/pam_loginuid.so/d' /etc/pam.d/sshd
RUN echo 'root:123456' | chpasswd
RUN /usr/bin/ssh-keygen -A
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]

# 3.执行dockerfile文件
docker build -t "oldguo/centos7_sshd:v3" /opt/dockerfile

# docker build 命令用于使用 Dockerfile 创建镜像。
# 使用时要指定dockerfile文件所在的目录,若不指定,就会从当前目录里找

三、容器

1.容器的类型

按用途容器大致可以分为两类:服务类容器和工具类容器

# 1. 服务类容器以daemon的形式运行,对外提供服务。比如web server,数据库等。通过-d参数以守护方式启动这类容器非常合适。如果需要排查问题,可以通过exec -it进入容器
	# 工具类:vim
	docker run -it --name="test_vim"  3fe2fe0dab2e /bin/bash

# 2. 工具类容器通常给我们提供一个临时的工作环境,通常以run -it方式运行
	# 服务类:nginx 
    # -d:后台运行
	docker run -d -p 8080:80 --name="discuz" nginx:1.14

2.容器的多类启动方式

①启动进入容器指定bash 退出后容器关闭

docker  run -it --name "test" centos:7.5.1804 /bin/bash
# 1.使用-it+/bin/bash执行后,会在容器后台启动一个bash进程,显示该容器的终端
# /bin/bash的作用是因为docker后台必须运行一个进程,否则容器就会退出

# 2.使用/bin/bash启动镜像的时候如果没有带参数 -it的话,容器会直接退出

# 3.使用-it执行后,容器重新分配一个伪输入终端,容器不会立即退出,直到exit容器才关闭

# 注:
# 针对于工具类的容器,由于是一次性使用的,一旦exit容器,容器就自动关闭。
# 对于想要退出后还可以在后台执行的,比如服务类,可以使用Ctrl+p+q。

②docker attach进入容器

# 如果容器没有指定bash环境会停留在空白页面 退出后容器也会正常退出(进入容器后其他人进入容器可以看到你输入的信息

docker  attach  test

# attach进入的容器应当是已经启动的容器,当有多台主机通过attach进入同一台容器时,所有的操作都是多台主机同时可见的,当退出时也是同时退出
# 也可以理解为,attach是对一台容器开了多个终端操作,当其中一台终端操作时,会反映到所有的终端上

③docker exec 进入容器 会启用一个bash环境

# exec也是进入一个已经开启的容器中,但是会新启用一个bash环境,不会像attach一样同步到每个终端
docker exec -it test /bin/bash

3.容器的常用管理命令

# 查看容器
# -a:显示所有的容器,包括未运行的。
# -q:只显示容器编号
# -l:显示最近创建的容器。
docker ps -a  -q -l
# 查看容器中运行的进程信息
docker top nginx


# 删除一个或多少容器
# -f:通过SIGKILL信号强制删除一个运行中的容器
# -l:移除容器间的网络连接,而非容器本身
# -v:删除与容器关联的卷
docker rm 容器ID|容器名称
# 批量删除已关闭
docker rm -v $(docker ps -aq -f status=exited)
# 批量强制删除所有
docker rm -f `docker ps -a –q`
	
# 获取容器/镜像的元数据,包括IP等
docker inspect nginx

# 连接到正在运行中的容器。
docker attach 容器ID|容器名称(工具类)配合ctrl+p+q
docker exec  -i -t  容器ID|容器名称 /bin/bash(服务类),一般是做服务类容器调试用

# 停止一个运行中的容器
docker stop 容器ID|容器名称
       
# 杀掉一个运行中的容器。
docker kill 容器ID|容器名称
      
# 启动一个或多个已经被停止的容器          
docker  start 容器ID|容器名称
 
# 重启容器
docker  restart 容器ID|容器名称

四、数据卷(持久化)

在Docker的使用过程中往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,所以这就涉及到Docker容器的数据操作。 容器中数据管理主要有两种方式:

数据卷和数据卷容器

  • 数据卷(Data Volumes) 容器内数据直接映射到本地宿主机。
  • 数据卷容器(Data Volume Containers) 使用特定容器维护数据卷

1.使用

# 启动时指定:
docker run -it --name="centosv1" -v /opt/datavolumns:/data centos  /bin/bash
# Dockerfile中指定
VOLUMES [“/data”]
docker inspect centosv1

2.数据卷数据的备份及恢复

# 备份
docker run --volumes-from  centosv1 --name “centosvbak“ --rm  -v /backup:/backup:rw  centos   tar cvf /backup/data.tar /data 

# 恢复      
docker run --volumes-from  centosv1 --name "centosrestore" --rm  -v /backup:/backup:rw  centos   tar xvf  /backup/data.tar

五、仓库

1.配置私有仓库

# 1.
docker run -d -p 5000:5000 --restart=always --name registry -v /opt/Registry:/var/lib/registry  registry

# 2.配置
vim /etc/docker/daemon.json

{
   "registry-mirrors": 				["https://68rmyzg7.mirror.aliyuncs.com"],
   "insecure-registries": ["10.0.0.100:5000"]
}

# 3.重启docker
systemctl  restart docker

2.使用本地镜像

# 配置好私有仓库,我们就可以把制作好的镜像放到本地的私有仓库,方便下载使用

# 1.制作本地镜像并push到私有仓库
# 为本地镜像nginx打上标签
# IP地址加上私有仓库的端口号(10.0.0.100:5000/)是必须的,后面的名字就随意了
docker tag nginx 10.0.0.100:5000/oldguo/nginx:v1
docker push 10.0.0.100:5000/oldguo/nginx:v1
        
# 2.异地进行pull镜像,从本地的私有仓库下载镜像
docker pull  10.0.0.100:5000/oldguo/nginx:v1	
原文地址:https://www.cnblogs.com/xvchengqi/p/10241184.html