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) 删除本地镜像,下载私有仓库的镜像