Docker的安装和使用

Docker架构

Docker安装

1. 去官网下载repo
2. 更改为国内镜像baseurl=https://download.docker.com/linux/
3. 有可能需要安装依赖包 yum install -y http://mirror.centos.org/centos/7/extras/x86_64/Packages/container-selinux-2.66-1.el7.noarch.rpm
4.  yum install docker-ce

Docker配置

1. /etc/docker/daemon.json
    {
        "registry-mirrors": ["https://registry.docker-cn.com"]
    }
    Docker镜像加速
2. 启动
# systemctl start docker
3. 查看 
# docker help
# docker info
4. Docker常用
# docker image --help
# docker search nginx  (https://hub.docker.com/)
    nginx 顶级仓库
    jwilder/nginx-proxy 私有仓库
# docker image pull nginx:1.14-alpine (下载alpine image, alpine是一个体积特别小的Nginx版本,没有任何调试工具,在实际工作中,根据自已的需要生成image)
# docker pull quay.io/coreos/flannel:v0.10.0-amd64 (到quay.io网站下载镜像,这个网站是常用的第三方镜像)
# docker image pull busybox:latest
# docker image ls (显示下载的image)
# docker image ls --no-trunc (显示详细信息)
# docker container --help
# docker container ls (显示容器)
# docker container ps (显示容器)
# docker container run --help
# docker network list (网络查询)
    docker0: 默认是NAT的网桥
# docker run --name b1 -it busybox:latest (以b1的名字运行image busybox,并且是交互式界面)
    / # ls (进入到busybox容器的shell)
    mkdir /data/html -p
    vim /data/html/index.html (在容器里生成主页)
    httpd -f -h /data/html (启动b1容器里和httpd)
# docker inspect b1 (在host上查看b1容器的IP)
# curl 172.17.0.2 (访问b1容器的网页)
    在容器里exit,退出容器
# docker ps -a (显示所有容器,运行的和停止的)
# docker container start -i -a b1 (启动容器)
#  docker kill b1 (强制停止容器)
# docker rm b1 (永久删除容器b1)
# docker run --name web1 -d nginx:1.14-alpine (启动nginx容器,如果本地没有下载nginx image,只要repo指定为hub.docker.com, 会自动下载,在容器中的进程不能运行在后台,因为是唯一进程,是支撑一个容器的骨架)
# docker run --name kdvsor1 -d redis:4-alpine (运行redis容器)
# docker exec -it kdvsor1 /bin/sh 
    # redis-cli
# docker logs web1 (在host中查看web1容器的日志)

Docker event state

Docker image

Docker镜像含有启动容器所需要的文件系统及其内容,因此,其主要作用创建并启动docker容器。

Docker分层机制

1. bootfs:用于系统引导的文件系统,包括bootloader和kernel,容器启动完成后会被卸载以节约内存资源。
2. rootfs:位于bootfs之上,表现为docker容器的根文件系统。rootfs由内核挂载为只读模式,而后通过联合挂载技术额外挂载一个可写层;
                位于下层的镜像称为父镜像,最底层的称为基础镜像
                最上层为可读写层,基下层均为只读层

Docker Registry

启动容器时,Docker Daemon会试图从本地获取相关的镜像,本地镜像不存在时,其将从Registry中下载该镜像并保存到本地

分类

Registry用于保存docker镜像,包括镜像的层次结构和元数据:
1. Sponsor Registry:第三方的registry,供客户和Docker社区使用
2. Mirror Registry:第三方的registry,只让客户使用
3. Vendor Registry:由发布Docker镜像的供应商提供的registry
4. Private Registry:通过设有防火墙和额外的安全层的私有实体提供的registry
注意:每个仓库可以包含多个Tag,但是每一个Tag只能属于一个仓库

Docker生产流程

Docker Registry中的镜像通常由研发人员制作,而后推送至公共或私有Registry上保存,供其他人员使用,然后部署到生产环境


1. Dockerfile
2. 基于容器制作
3. Docker Hub automated builds

基于容器制作镜像的实例

#  docker run --name b1 -it busybox
    # / # mkdir -p /data/html
    # / # vi /data/html//index.html
# docker commit -p b1 (制作image,此镜像还是以bysybox的sh启动)
# docker tag 542b72efce7e linuxdevops/httpd:v1.0-1 (给镜像标签)
# docker tag linuxdevops/httpd:v1.0-1 linuxdevops/httpd:latest (加另一个标签)
# docker run --name t1  -it linuxdevops/httpd:v1.0-1 (启动做的镜像)
    # / # ls /data/html/index.html 
#  docker commit -a "evanliang" -c 'CMD ["/bin/httpd","-f","-h","/data/html"]' -p b1 linuxdevops/httpd:v1.0-2
#  docker run --name t2  -it linuxdevops/httpd:v1.0-2
# curl 172.17.0.4 (新做的linuxdevops/httpd:v1.0-2能直接启动httpd)
4. 在dockerhub上创建账户
    # docker tag f43e5c3f987c liangjindong/httpd (tag名字一定要和dockerhub上创建的REPOSITORY名字一致)
    # docker login -u liangjindong (登录dockerhub)
        Password:
        WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
        Configure a credential helper to remove this warning. See
        https://docs.docker.com/engine/reference/commandline/login/#credentials-store
        Login Succeeded
    # docker push liangjindong/httpd (如果不带tag,所有image孝会上传到dockerhub)
    # 在dockerhub上,可以看到


# 同时,可以用国内阿里云的镜像服务dev.aliyun.com
# 配置镜像加速:
针对Docker客户端版本大于 1.10.0 的用户
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://sah48iqf.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
同时,可以在阿里云上创建镜像仓库,上传:
# sudo docker tag 0dfafbbae68a registry.cn-beijing.aliyuncs.com/liangjindong/httpd:latest (用阿里云指定的tag)
# sudo docker login --username=liangjindong registry.cn-beijing.aliyuncs.com (登录)
# sudo docker push registry.cn-beijing.aliyuncs.com/liangjindong/httpd (上传镜像)
在阿里云上检查,成功

5. docker镜像打包分发
# docker save -o myimages.gz liangjindong/httpd:latest liangjindong/httpd:v1.0
# docker load -i myimages.gz 把myimages.gz copy到另外一台docker服务器
镜像打包分发需要提前把image本地准备好,否则运行docker run时还会去dockerhub默认的Registry下载。

Docker Hub

集中存储各种Docker镜像
Github他Docker hub来实现镜像的Automated Builds

原文地址:https://www.cnblogs.com/liangjindong/p/9398556.html