Docker入门及技术指南

初识Docker

参考文档

《docker 从入门到实践.pdf》《第一本Docker书 完整版.pdf》

版本

Docker 分为 CE 和 EE 两大版本。CE 即社区版(免费,支持周期 7 个月),EE 即企业版,
强调安全,付费使用,支持周期 24 个月。

手册帮助:http://www.runoob.com/docker/docker-tutorial.html

                  https://docs.docker.com/ 

docker hub 镜像资源站 :https://hub.docker.com   

什么是Docker?

Docker 是使用 Go 语言开发的一种 Linux 容器封装,提供简单易用的使用接口,是目前最流行的 Linux 容器解决方案。

Docker与VM的区别

参考:https://blog.csdn.net/jingzhunbiancheng/article/details/80994909

docker和传统虚拟机技术的特性比较:https://blog.csdn.net/xupeixin520/article/details/80588531

Docker容器化虚拟机:抛弃传统虚拟机:https://blog.csdn.net/boonya/article/details/83027974

Docker安装

Centos7.0以下的参考:https://blog.csdn.net/qq_21101587/article/details/83820690

以下适用于centos7.0以上

 1、更新update到最新的版本

yum  update

2、卸载老版本docker

yum  remove docker  docker-common docker-selinux  docker-engine

3、安装需要的软件包

yum install -y yum-utils  device-mapper-persistent-data lvm2

4、设置yum源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

5、查看docker版本

 yum list docker-ce --showduplicates|sort -r  

6、安装docker

yum install -y docker-ce

指定版本安装,如下:

yum  install  docker-ce-18.03.1.ce -y

7、启动docker

systemctl start docker

8、加入开机自启

systemctl enable docker

9、配置国内镜像

vi /etc/docker/daemon.json

{

    "registry-mirrors": ["http://hub-mirror.c.163.com"]

}

几个基本概念

Docker 包括三个基本概念
镜像( Image )
容器( Container )
仓库( Repository )

Docker三剑客

Docker-Composer

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。

Docker-machine

Docker Machine 是 Docker 官方编排(Orchestration)项目之一,负责在多种平台上快速安
装 Docker 环境。Docker Machine 项目基于 Go 语言实现,目前在 Github 上进行维护。

Docker-Swarm

Docker Swarm 是 Docker 官方三剑客项目之一,提供 Docker 容器集群服务,是 Docker 官方对容器云生态进行支持的核心方案。使用它,用户可以将多个 Docker 主机封装为单个大型的虚拟 Docker 主机,快速打造一套容器云平台。

镜像操作

  • 获取镜像  #docker pull redis:latest
  • 列出镜像  #docker images

                #docker image ls

  • 删除镜像  #docker image rm [选项]              [选项]可以是镜像短 ID 、 镜像长 ID 、 镜像名 或者 镜像摘要

    删除镜像为none的 #  docker rmi $(docker images | grep "none" | awk '{print $3}')

  • 构建镜像实例:#docker build -t nginx-yan1 .

                        # docker build -t angelkitty/nginx_web:v1 .

  • 保存镜像  #docker save -o a.tar 1e1148e4cc2c

                #docker save 1e1148e4cc2c > /home/a.tar

  • 加载镜像  #docker load -i nginx-yan1.tar 1e1148e4cc2c

                #docker load < /home/a.tar

  • 更改docker标签:#docker tag ae91f9dad35b nginx-yan1:20190328
  • 更改docker容器名:# docker rename 原容器名  新容器名

# docker rename mysql-master57 mysql-master8  

  • 构建镜像实例  #docker build -t nginx-yan1:v1 .

注:当前目录中应当包含脚本文件Dockerfile容器操作

  • 停止容器 #  docker container stop

   批量    # docker container stop $(docker ps -a -q)

  • 列出所有容器  #docker ps
  • 删除容器  # docker container rm 

   批量    # docker container rm $(docker ps -a -q)

  • 根据镜像创建容器

# docker run -itd --name redis-yan-v1 --net mynetwork -p 6380:6379 --ip 192.168.0.2 redis-yan:v1

-d: 后台运行容器,并返回容器ID;

-i: 以交互模式运行容器,通常与 -t 同时使用;

-p: 端口映射,格式为:主机(宿主)端口:容器端口

-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

--ip: 为容器制定一个固定的ip

--net: 指定网络模式

  • 进入容器

# docker exec -it redis-yan-v1 bash

  docker exec -it  bash

仓库操作

  • 下载仓库组件生成镜像:# docker pull cenos
  • 上传本地镜像到仓库 # docker push 127.0.0.1:5000/ubuntu:latest
  • 查看仓库中的镜像 # $ curl 127.0.0.1:5000/v2/_catalog
  • 查询远程仓库镜像:#docker search centos

自定义网络操作

  • 列出所有的网络配置  # docker network ls
  • 创建自定义网络  #  docker network create --subnet=192.168.0.0/16 mynetwork
  • 查看容器的网络配置  #docker network inspect
  • 删除网络配置  #docker network rm

数据卷

  • 挂载一个数据目录作为数据卷

#  docker run -itd --name test \
--mount type=bind,source=/home/myapp,target=/myapp alpine

# docker exec -it test sh

//test为容器名,alpine为镜像名,意为将本地目录/home/myapp挂载到容器test的/myapp中。这样容器的/myapp目录修改数据后,本机目录也同时修改。即使容器删除,数据不会丢失。

 

卸载docker

  • 卸载Docker
    #yum remove docker-ce
  • 清理镜像、容器、存储卷等
    #rm -rf /var/lib/docker

技巧及提示

1、docker安装后,核心文件在目录/var/lib/docker/下有目录containers、images等,排查错误时可进相应目录查看。

问题记录

  • 问题:docker容器存放目录磁盘空间满了,如何做

解决:docker数据默认存放在/var/lib/docker,若存满了,可以迁移数据,然后使用使用软连接将数据存放在数据盘,#ln -s /vdb1/var/lib/docker /var/lib/docker

参考https://blog.csdn.net/qq_37674858/article/details/79976751

  • 问题:删除镜像时image is referenced in multiple repositories,

#docker rmi [IMAGEID]时会提示上述错误

解决:#docker image rm nginx2:latest  ,带镜像tag删除,提示“Untagged: nginx2:latest”,再次查看解除镜像了。

  • 问题:docker创建网络时报错“Pool overlaps with other one on this address space“”

解决:因为已经有网络定义了192.168.0.0/16的subnet,网段定义重叠了,无须再定义,或重新定义其他网段。

  • 问题:docker run报错:172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name

解决:https://blog.csdn.net/qq_14853889/article/details/79678406?utm_source=blogxgwz6

  • 问题:容器运行后总是exitd

解决:docker update --restart=always 

或docker run --restart=always ... 注意加--restart=always参数

 

持续完善,待续...

 

 

你可能感兴趣的:(性能优化,Docker,虚拟化)