docker安装与使用

Posted glh-ty

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker安装与使用相关的知识,希望对你有一定的参考价值。

一,容器概念

容器三大基本概念
镜像 image
容器 container
仓库 repository
docker整个生命周期就是这三个概念。

docker镜像

image相当于一个root文件系统,比如官方镜像 ubuntu:14.04 就包含了完整的一套 Ubuntu 14.04 最小系统的 root 文件系统。

image的分层存储

因为镜像包含完整的root文件系统,体积是非常庞大的,因此docker在设计时按照Union FS的技术,将其设计为分层存储的架构。
镜像不是ISO那种完整的打包文件,镜像只是一个虚拟的概念,他不是一个完整的文件,而是由一组文件组成,或者多组文件系统联合组成。

docker容器

image和container的关系,就像面向对象程序设计中的 类和实例一样,镜像是静态的定义(class),容器是镜像运行时的实体(object)。
容器可以被创建、启动、停止、删除、暂停

docker仓库

镜像构建完成后,可以很容易的在宿主机上运行,如果要在其他服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务。docker registry就是这样的服务。
一个docker registry可以包含多个仓库(repository),每个仓库有多个tag(标签),每个标签对应一个镜像。
一个仓库包含同一个软件不同版本的镜像,标签就是用于标记版本的。

ubantu:14.04
ubantu:16.05
不指定tag的话默认是
ubantu:latest
仓库名海会以 bob/nginx-proxy形式出现,表明docker registry多用户环境下的 用户名/软件名

docker Registry

Docker Registry 公开服务是开放给用户使用、允许用户管理镜像的 Registry 服 务。一般这类公开服务允许用户免费上传、下载公开的镜像,并可能提供收费服务 供用户管理私有镜像。

最常使用的 Registry 公开服务是官方的 Docker Hub,这也是默认的 Registry,并 拥有大量的高质量的官方镜像。

除此以外,还有 CoreOS 的 Quay.io,CoreOS 相 关的镜像存储在这里;Google 的 Google Container Registry,Kubernetes 的镜像 使用的就是这个服务。
由于某些原因,在国内访问这些服务可能会比较慢。
国内的一些云服务商提供了针 对 Docker Hub 的镜像服务(Registry Mirror),这些镜像服务被称为加速器。常见 的有 阿里云加速器、DaoCloud 加速器、灵雀云加速器等。
使用加速器会直接从国内的地址下载 Docker Hub 的镜像,比直接从官方网站下载速度会提高很多。在后 面的章节中会有进一步如何配置加速器的讲解。
国内也有一些云服务商提供类似于 Docker Hub 的公开服务。比如 时速云镜像仓 库、网易云镜像服务、DaoCloud 镜像市场、阿里云镜像库等。

二,安装

请遵循官方安装方式!!!

https://docs.docker.com/install/linux/docker-ce/centos/#upgrade-docker-after-using-the-convenience-script

官方教程如下,最正确安装docker姿势

1.卸载旧版本
sudo yum remove docker                   docker-client                   docker-client-latest                   docker-common                   docker-latest                   docker-latest-logrotate                   docker-logrotate                   docker-selinux                   docker-engine-selinux                   docker-engine

2.设置存储库
sudo yum install -y yum-utils   device-mapper-persistent-data   lvm2

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

3.安装docker社区版
sudo yum install docker-ce
4.启动关闭docker
systemctl start docker

5. 查看版本
docker version
技术分享图片
#yum安装软件的整个过程
1.配置yum源,在/etc/yum.repos.d/下产生 docker.repo文件
2.检查这个文件中的baseurl地址,下载的软件包就来自于这里
3.baseurl=https://download.docker.com/linux/centos/7/$basearch/stable
4.查看yum到底安装的是谁
    docker-ce-18.09.0-3.el7.x86_64.rpm                                                    2018-11-07 23:58:48 18.7 
    docker-ce-cli-18.09.0-3.el7.x86_64.rpm  
5.yum自动下载rpm包,自动解决依赖关系,非常方便
6.通过yum下载的软件包,systemctl进行管理
7. systemctl start docker 
8.docker version查看版本



假如你配置yum官方仓库无法安装,由于网络因素,那你就别配yum官方仓库了,删掉仓库
通过自带的epel源下载  yum install docker  ,只是这个版本较低,
安装过程详解

docker版本

Docker 是一个开源的商业产品,有两个版本:社区版(Community Edition,缩写为 CE)和企业版(Enterprise Edition,缩写为 EE)。
企业版包含了一些收费服务,个人开发者一般用不到。本文的介绍都针对社区版。

 系统环境准备

docker最低支持centos7且在64位平台上,内核版本在3.10以上

[[email protected]_python ~ 10:48:11]#uname -r
3.10.0-693.el7.x86_64

Docker镜像加速器

https://www.daocloud.io/mirror#accelerator-doc


https://www.cnblogs.com/pyyu/p/6925606.html
#一条命令加速
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io


# 或者也可以手动
vim /etc/docker/daemo.json
写入
{"registry-mirrors": ["http://95822026.m.daocloud.io"]}

三,使用

1,基本命令

启动docker

systemctl  start/restart/stop  docker

基本命令

1.docker加速器,加速镜像下载
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://95822026.m.daocloud.io
2.获取docker镜像
docker search ubuntu   #查找ubuntu镜像
docker pull ubuntu  #下载ubuntu镜像
3.查看docker存在哪些镜像
docker image ls
docker images 
4.删除镜像文件
    1.删除容器相关记录
        docker rm  容器id 

    2.删除镜像记录
       docker  rmi 镜像名(镜像id)
    
    3.批量删除容器记录
    docker rm `docker ps -aq` 
    
5.检查容器进程(存活)
docker ps 
6.检查容器进程记录(挂掉的)
docker ps -a 
7. 运行镜像,产生容器
docker run hello-world 
8.交互式运行docker容器
docker run -it --rm ubuntu bash 
    docker run就是运行容器的命令。
    参数
     -it : -i 是交互式操作,-t是终端
     -rm  :   容器退出后将其删除。也可以不指定参数,手动docker rm,使用-rm可以避免浪费空间。
     ubuntu:14.04   这指的是镜像文件
     bash   :  指定用交互式的shell,因此需要bash命令

后台模式启动docker

-d参数:后台运行容器,返回容器ID

# docker在centos中运行一段shell脚本,后台运行
docker run -d centos /bin/sh -c "while true;do echo hello centos; sleep 1;done" # 返回结果
c0283f1077d16a2bf2597e269d51a02815334f7390f18a62ed7a4ba07f351b65
#检查容器进程docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c0283f1077d1 centos "/bin/sh -c ‘while..." 6 seconds ago Up 5 seconds fervent_turing

查看容器内的标准输出

docker logs c02

停止容器

docker stop c02
#此时容器进程不存在
docker ps

启动容器

docker start c02
#检查容器进程
docker ps
删除容器
docker rm c02

2,提交创建自定义的镜像(docker container commit)

1.我们进入交互式的centos容器中,发现没有vim命令
docker run -it centos
2.在当前容器中,安装一个vim
yum install -y vim
3.安装好vim之后,exit退出容器
exit
4.查看刚才安装好vim的容器记录
docker container ls -a
5.提交这个容器,创建新的image
docker commit 059fdea031ba sss/centos-vim
6.查看镜像文件
[[email protected] /home]docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
sss/centos-vim   latest              fd2685ae25fe        5 minutes ago       348MB

3,搭建简单web应用,外部访问容器

容器中可以运行网络应用,但是要让外部也可以访问这些应用,可以通过-p或-P参数指定端口映射。

-P 参数会随机映射端口到容器开放的网络端口
#docker run -d -P training/webapp python app.py

检查映射的端口

#宿主机ip:32768 映射容器的5000端口
[[email protected]_python ~ 16:34:02]#docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cfd632821d7a training/webapp "python app.py" 21 seconds ago Up 20 seconds 0.0.0.0:32768->5000/tcp brave_fermi

查看容器日志信息

#不间断显示log
docker logs -f cfd

也可以通过-p参数指定映射端口:常用

#指定服务器的9000端口,映射到容器内的5000端口
[[email protected]_python ~ 16:46:13]#docker run -d -p 9000:5000 training/webapp python app.py c0b5a6278d0f4f2e9b9eba8680451111d8b911b61de0c37ea64cb337aefb854e

访问服务器的9000端口

(如果访问失败的话,检查自己的防火墙,以及云服务器的安全组)

技术分享图片

查看指定容器的端口映射

#docker port c0b
5000/tcp -> 0.0.0.0:9000

查看容器内的进程

#docker top c0b
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                3926                3912                0                   16:46               ?                   00:00:00            python app.py

四,发布docker image到仓库

1,docker hub公有镜像发布

1.docker提供了一个类似于github的仓库dockerhub,
网址https://hub.docker.com/需要注册使用
2.注册docker id后,在linux中登录dockerhub
docker login

注意要保证image的tag是账户名,如果镜像名字不对,需要改一下tag
docker tag ubuntu mrglh/ubuntu
语法是: docker tag 仓库名 mrglh/仓库名

3.推送docker image到dockerhub docker push mrglh/ubuntu
4.在dockerhub中检查镜像 https://hub.docker.com/

5.删除本地镜像,测试下载pull 镜像文件 docker pull mrglh/ubuntu

2,私有仓库

但是这种镜像仓库是公开的,其他人也是可以下载,并不安全,因此还可以使用docker registry官方提供的私有仓库

docker私有仓库搭建:
    docker  
    -v 参数  
    假设我要在docker容器中安装 nginx 软件
        nginx软件有网页根目录
            root  /opt/static/nginx 
                        js 
                        css 
    这个nginx静态文件,可以放在容器中管理
    也可以通过-v参数挂载一个数据
            -v  宿主机/opt/staic/nginx      容器/opt/static/nginx  
                        js1 js2 js3              容器中的nginx软件,读取数据时候,通过-v参数,去宿主机读取
步骤详解
1.找到本地docker文件 vim /etc/docker/daemon.json 2.写入配置 必须注意此文件是json格式!!!注意引号 {"registry-mirrors": ["http://95822026.m.daocloud.io"], "insecure-registries":["45.32.52.244:5000"] } 3.将此文件,添加到docker服务脚本中 vim /lib/systemd/system/docker.service 4.写入以下配置,注意!!!,写入到[Service]配置块中,加载此配置文件 [Service] EnvironmentFile=/etc/docker/daemon.json 5.修改了docker配置文件,重新加载docker systemctl daemon-reload 6.重启docker服务,使得生效 systemctl restart docker 7.由于重启了docker,所有的容器实例全挂了,因此要打开私有仓库的容器实例 1.docker ps -a 检查私有仓库的容器记录 2. docker start 私有仓库的id 3.此时docker ps 检查 私有仓库服务是否启动 8.修改本地镜像的tag,便于推送到本地镜像仓库 docker tag 镜像名 45.32.52.244:5000/镜像名 如 docker tag ubuntu 45.32.52.244:5000/ubuntu 9.推送本地镜像到私有docker仓库 docker push 45.32.52.244:5000/ubuntu 10.docker私有仓库提供了API数据可供查看 http://10.0.0.10:5000/v2/_catalog 11.可以测试删除本地镜像,然后从私有仓库拖取镜像 docker pull 45.32.52.244:5000/ubuntu

 

以上是关于docker安装与使用的主要内容,如果未能解决你的问题,请参考以下文章

Docker删除报错:Error response from daemon: conflict: unable to delete 08b152afcfae (must be forced)(代码片段

Docker决战到底 Jenkins的安装与使用

Docker安装与镜像的使用

Python3 - Docker Compose的安装与使用

Python3 - Docker Compose的安装与使用

Python3 - Docker Compose的安装与使用