docker基础

docker官方使用文档  https://docs.docker.com/get-started/

一 docker概述

1容器的概述

• 容器技术已经成为应用程序封装和交付的核心技术
• 容器技术的核心有以下几个内核技术组成:
– CGroups(Control Groups)-资源管理
– NameSpace-进程隔离
– SELinux安全
• 由于是在物理机上实施隔离,启动一个容器,可以像
启动一个进程一样快速

2 docker的概念

• Docker是完整的一套容器管理系统
• Docker提供了一组命令,让用户更加方便直接地使用容器技术,而不需要过多关心底层内核

3docker的特性

1)优点

• 相比于传统的虚拟化技术,容器更加简洁高效
• 传统虚拟机需要给每个VM安装操作系统
• 容器使用的共享公共库和

4 docker的缺点

• 容器的隔离性没有虚拟化强
• 共用Linux内核,安全性有先天缺陷
• SELinux难以驾驭
• 监控容器和容器排错是

二 docker部署

1 安装

#卸载已经安装好的docker
yum remove docker   docker-client  docker-client-latest  docker-common  docker-latest  docker-latest-logrotate  docker-logrotate  docker-engine
#安装依赖
yum install -y yum-utils   device-mapper-persistent-data   lvm2
#添加docker镜像源(国外的太慢不建议)
yum-config-manager     --add-repo   https://download.docker.com/linux/centos/docker-ce.repo
#推荐使用国内的阿里源或者网易源
yum-config-manager --add-repo     https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#启用夜间存储库
yum-config-manager --enable docker-ce-nightly
#下载安装docker
yum install docker-ce docker-ce-cli containerd.io
#列出并对您的仓库中可用的版本进行排序。此示例按版本号对结果进行排序,从最高到最低,并被截断:
yum list docker-ce --showduplicates | sort -r
#启动docker
systemctl start docker

2 查看docker的信息

[root@es1 ~]# rpm -qi docker

3 配置镜像加速器

 [root@es1 ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io

[root@es1 ~]# systemctl restart docker         #启动失败

[root@es1 ~]# vim  /etc/docker/daemon.json  

配置阿里云镜像加速器

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

二 docker的基本使用

docker search  镜像名     #搜索镜像
docker imges                 # 查看本地镜像
docker help pull             # 查看下载镜像使用方法方法
docker pull  镜像名          #下载镜像
docker  help push           #查看上传镜像使用方法
docker push  镜像名         #上传镜像到仓库
docker run 镜像名             #运行一个docker镜像产生一个容器实例
docker  container ls         #列出所有正在运行的容器
docker  ps -a                  #列出所有曾经运行过的容器记录,以及正在运行的容器记录
docker pull centos            #下载centos镜像
docker load < xx.tar         #通过tar文件包导入镜像
docker save 镜像名 > xx.tar # 将本地镜像导出为tar文件
启动镜像
docker   run   -it   镜像名     /bin/bash  #启用一个镜像生成一个容器
docker ps                      #打开另一个终端查看容器信息
docker stop                     #关闭容器
docker start                     #启动容器
docker restart                     #重启容器
docker attach  容器id           #进入容器,退出时会关闭容器
docker exec  -it  容器id  /bin/bash  #进入容器,退出时不会关闭容器
docker top                          #查看容器进程列表
docker rm                          #删除容器
docker history  镜像名          #查看镜像制作历史
docker inspect  镜像名         #查看镜像底层信息,了解镜像环境变量、存储卷、标签等信息
docker rmi        镜像名             #删除本地镜像
docker search    镜像名             #搜索镜像
docker tag         镜像名              #修改镜像名称和

三 自定义镜像

1 使用docker commit 自定义镜像

docker run -it centos       #运行一个centos镜像
yum -y install vim           #进入当前镜像,并下载vim工具
exit                            #退出当前镜像
docker container ls -a       #退出当前镜像
docker commit 5879e75696f1  tiger/centos-vim  #另存为另一个镜象 
docker images  

2 Dockerfile 语法格式

FROM             :基础镜像
MAINTAINER    :镜像创建者信息
EXPOSE           :开放的端口
ENV                :设置变量
ADD                :复制文件到镜像
RUN                :制作镜像时执行的命令,可以有多个
WORKDIR        :定义容器默认工作目录
CMD                :容器启动时执行的命令,仅可以有一条CMD        

dockerfile自定义镜像案例

案例一:

创建一个目录build 并进入这个目录
[root@es1 ]#mkdir bulid ;cd build
创建dockerfile文件
[root@es1 ]#vim dockerfile
FROM centos        #指定父镜像
WORKDIR /var/www/html  #指定工作目录
RUN yum -y install httpd #运行命令
RUN echo "test" > /var/www/html/index.html
EXPORSE 80
CMD [“httpd", "-DFOREGROUND"]
[root@es1 ]#docker build -t centos_http:v1 .

案例二

进入nginx压缩包所在目录, 直接一条命令就行了。
docker build -t myimage:latest -f- . <<EOF
FROM centos         #指定父镜像
ADD nginx-1.12.2.tar.gz  /opt/   #将压缩包上传并解压至opt目录
RUN yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel
run yum -y install libxsit-devel gd gd-devel GeoIP GeoIP-devel pcre pcre-devel
run useradd -M -s /sbin/nogin nginx
WORKDIR /opt/nginx-1.12.2  #指定工作目录
RUN ./configure --user=nginx --group=nginx --prefix=/opt/nginx
EXPOSE 80
EOF
[root@es1 ~]# docker run  -d -p80:80 centos_nginx:v1   #运行容器和服务
ebd5cb14f65b8b3a15ec9d0b9b8bda46acc1905d13187718b00174fb7231cc4d

3 自定义镜像仓库

regist基本概念 共享镜像的一台服务器

搭建私有镜像仓库

(1) 一条命令下载registry镜像并且启动私有仓库容器
docker pull registry
(2) 通过-v参数将镜像文件存储到本地的/opt/data/registry下, 端口映射容器中的5000端口到宿主机的5000端口
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry
(3) 检查启动的registry容器记录
docker ps
(4)  测试连接容器
telnet 192.168.12.56 5000
(5) 修改镜像tag,以docker registry的地址端口开头
docker tag hello-world:latest 192.168.12.56:5000/qishi2_hello-world:latest
(6)  Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制,这里必须写正确json数据
修改配置文件
vim /etc/docker/daemon.json
添加以下内容
"insecure-registries":["192.168.119.10:5000"]
添加完成之后,/etc/docker/daemon.json文件内容如下
{
  "registry-mirrors": ["http://95822026.m.daocloud.io"],
  "insecure-registries":["192.168.12.56:5000"]
}


写入到docker服务中,写入到[Service]配置块中,加载此配置文件
操作流程如下
  打开docker服务的配置文件:
  vim /lib/systemd/system/docker.service
  写入以下内容:
  EnvironmentFile=-/etc/docker/daemon.json
  写入的时候,要注意,把这个配置文件加入到[Service]代码块中
![1555987708819](assets/1555987708819.png
(7)修改了docker配置文件,重新加载docker
systemctl daemon-reload
(8) 重启docker
systemctl restart docker
##### 注意,重启docker服务,所有的容器都会挂掉!!!

##### 注意,重启docker服务,所有的容器都会挂掉!!!

##### 注意,重启docker服务,所有的容器都会挂掉!!!

(9) 重启了docker,刚才的registry容器进程挂掉了,因此重新启动它
docker ps -a
docker start 容器id
(10)  上传本地镜像
docker push 192.168.12.56:5000/qishi2_hello-world
(11) 在浏览器访问私有仓库的现有镜像
http://192.168.12.56:5000/v2/_catlog

(12) 在本地查看已经上传过的镜像

![1555988149994](assets/1555988149994.png)

(13)  删除本地镜像,下载私有仓库的镜像
原文地址:https://www.cnblogs.com/liucsxiaoxiaobai/p/10771413.html