您的位置:首页 > 运维架构 > Docker

Docker 安装与使用 2019

2019-04-18 23:39 399 查看

官网:www.docker-cn.com

简介:

Docker是一个开源的应用容器引擎;是一个轻量级容器技术;
Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使
用这个镜像;
运行中的这个镜像称为容器,容器启动是非常快速的

 

 核心概念:

docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);
docker客户端(Client):连接docker主机进行操作;
docker仓库(Registry):用来保存各种打包好的软件镜像;(所有的模板类)
docker镜像(Images):软件打包好的镜像;放在docker仓库中;(模板类)
docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用(java的bean,非单例)

 

使用Docker的步骤:

 

  • 安装Docker
  • 去Docker仓库找到这个软件对应的镜像;
  • 使用Docker运行这个镜像,这个镜像就会生成一个Docker容器;
  • 对容器的启动停止就是对软件的启动停止;

 

卸载

[code]
1.查询安装过的包
yum list installed | grep docker
docker-engine.x86_64                 17.03.0.ce-1.el7.centos         @dockerrep
2.删除安装的软件包
yum -y remove docker-engine.x86_64
3.删除镜像/容器等
rm -rf /var/lib/docker

安装Docker

[code]准备:
系统要求,64位,内核版本3.10以上
uname -r :查看系统版本
cat /etc/redhat-release : 查看centOS版本  
[code]centOs6.8安装docker
1、yum install -y epel-release   依赖库
2、yum install -y docker-io      安装docker
3、安装后的配置文件:/etc/sysconfig/docker
4、启动docker : service docker start
5、docker version 验证
[code]CentOS7安装Docker
1、//卸载已有的docker
$ sudo yum remove docker \
docker-common \
docker-selinux \
docker-engine

2、安装驱动包
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
3、使用下列命令设置 stable 镜像仓库
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
4、启用 edge 和 testing 镜像仓库
$ sudo yum-config-manager --enable docker-ce-edge
$ sudo yum-config-manager --enable docker-ce-testing

5、更新 yum 软件包索引。
sudo yum makecache fast
6、安装最新版本的 Docker CE
sudo yum install docker-ce
7、 启动docker
sudo systemctl start docker
8、验证安装完成
sudo docker run hello-world

Docker镜像仓库加速(使用阿里云,国外下载太慢)

1、注册阿里云(可以用淘宝账户登陆)https://promotion.aliyun.com/ntms/act/kubernetes.html

获取镜像加速地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

2、#修改镜像地址

[code]sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://fhotxdhv.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

设置开机启动
systemctl enable docker

运行docker run hello-world

 

 

 

docker命令

镜像命令:

[code]docker version
docker info 个人信息详细描述
docker --help  帮助命令

docker images 查看本机的镜像
REPOSITORY:镜像仓库源
TAG:镜像标签(版本)
IMAGE ID:镜像id
CREATED:创建时间
SIZE:镜像大小
docker images -a 显示本地全部镜像(包含内层镜像)
docker images -q 显示本地镜像id
docker images -qa 显示本地全部镜像id
docker images --digests 镜像摘要信息
docker images --no-trunc 镜像完整信息

docker search tomcat 远程仓库中查找镜像文件(各种版本)
docker search -s 30 tomcat 显示点赞数超过30以上的版本

docker pull tomcat 下载远程镜像 (不写版本好默认是 :latest 最新版本)

docker rmi hello-world:latest 删除镜像(不写版本好默认是 :latest 最新版本)
docker rmi -f hello-world 强制删除,运行中也可以删除 (用名字或id都可以)
docker rmi -f hello-world nginx  删除多个,空格分隔
docker rmi -f $(docker images -qa) 删除全部

容器命令:

[code]docker pull centos  下载只有199mb,他是一个精简版的运行需要的程序。快
docker run -it --name mycentos 9f38484d220f    i代表交互,t代表伪终端
docker ps  查询docker里面的所有容器
docker exit 容器停止推出
docker ctrl+P+Q 容器不停止推出(后台运行)
docker ps -l 显示上一次运行过的容器
docker ps -n 3 显示上三次运行过的容器
docker ps -lq 只显示容器编号(显示上一次运行过的容器)
docker start mycentos 启动已有的容器
docker stop mycentos 停止容器(正常关机)
docker kill mycentos 强制停止容器
docker rm 9f38484d220f 删除已停止的容器
docker rm -f 9f38484d220f 删除容器(可以未停止)

docker run -d centos  后台运行(docker 后台运行必须有一个前台程序,没有会自动关闭)
docker logs -f -t --tail 查看日期 (-t 加入日志时间戳,-f跟随最新日志打印,--tail显示最后多少条)
docker top 9f38484d220f 查看容器内的进程
docker inspect 9f38484d220f 查看容器内部细节
docker attach 9f38484d220f 重新进入容器(ctrl+P+Q)
docker exec -t 9f38484d220f ls -l/tmp  在容器外面,执行容器里面的命令
docker cp 9f38484d220f:/tmp/yum.log /root  拷贝容器里面的内容到容器外面

docker run -it -p 8888:8080 tomcat启动tomcat 外部暴露端口8888(内部还是8080)
打包正在运行的容器为镜像,名字:atguigu/mytomcat,版本号:1.0 ,-m描述信息,-a作者
docker commit -a="zzyy" -m="new Tomcat" 913c5cb0bfb9 atguigu/mytomcat:1.0
启动自己打包的镜像
docker run -it -p 7777:8080 atguigu/mytomcat:1.0

数据卷(docker容器数据持久化)

[code]特点:
1、可以在容器直接共享,或重用数据
2、卷中的更改可以直接生效
3、卷中的更改不会包含在镜像中
4、数据卷的生命周期一直保持到没有容器使用它为止

直接命令:
docker run -it -v /宿主机绝对路径目录:/容器内目录  镜像名
主机上开始没有myDataResources文件,镜像内也没有dataContainer 文件,开始后会在对应位置创建,容器内的dataContainer 相当于和myDataResources绑定在一起,修改一起生效。
docker run -it -v /myDataResources: /dataContainer centos
docker inspect centos  查看到绑定信息

容器停止后,主机修改,服务器启动数据同步

docker run -it -v /myDataResources:/dataContainer:ro centos 添加的卷,容器内只能读,不能写

数据卷容器(活动硬盘上挂活动硬盘,实现数据的传递依赖)

[code]1、docker run -it --name dc01 zzyy/cenos  启动之前写好dockerfile的容器
docker run -it --name dc02 --volumes-from dc01 zzyy/cenos 与dc01共享容器卷
docker run -it --name dc03 --volumes-from dc01 zzyy/cenos 与dc01共享容器卷


DockerFile:(像是docker images源码的改动)

[code]mkdir /mydocker  主机下建一个mydocker文件夹
使用dockerFile添加一个卷
vim Dockerfile

Dockerfile内容:(docker run -it -v /host1:/dataVolumeContainer1 -v host2/dataVolumeContainer2 centos /bin/bash)
1、(宿主机上的容器卷是默认生成的)
FROM centos
VOLUME ["/dataVolumeContainer1","dataVolumeContainer2"]
CMD echo "finished,--------success1"
CMD /bin/bash
2、docker build -f /mydocker/Dockerfile -t zzyy/centos . 根据dockerFile创建新的镜像

3、出现cannot open directory异常 添加 --privileged=true
docker run -it -v /host1:/dataVolumeContainer1 --privileged=true centos

4、解析过程
保留字指令必须大写,执行内容不能为空。
命令由上到下执行。
# 注释
每条指令都会创建一个新的镜像层,并对镜像层提交

5、执行流程
docker从基础镜像运行一个容器
执行一条命令并对容器进行修改
执行docker commit操作提交一个新的镜像层
docker基于刚提交的镜像,运行一个新的容器
执行docker的下一条指令,直到所有命令执行完毕。

6、保留字指令
FROM :当前命令基于那个基础镜像  (scratch所有镜像的基类)
MAINTAINER :作者加作者的邮箱
RUN :容器运行时需要执行的命令
EXPOSE :对外暴露的端口号
WORKDIR:登录以后的工作目录(登录后第一次停留的目录)
ENV:临时环境变量
ADD:拷贝加解压缩
COPY:拷贝
VOLUME:容器数据卷,用于保存数据持久化
CMD:指定容器运行时需要运行的命令。(可以有多个cmd命令,但只会执行最后一个)
ENTRYPOINT:指定容器运行时需要运行的命令。(追加命令,多个指令会绑定一起执行)
ONBUILD:有子镜像继承本地镜像时,子镜像构建后会触发父镜像的这个命令

案例:

1、添加一个centos镜像,会自动导入vim 和ifconfig 功能,进去入口是 /user

[code]from centos

ENV mypath /user
WORKDIR $mypath

RUN yum -y install vim
RUM yum -y install net-tools

EXPOSE 80
CMD /bin/bash

2、最后添加命令 

[code]#执行centos里面的url命令查询当前ip所在区域

1、直接执行-i然后报错
FROM centos
Run yun install -y curl
CMD["curl","-s","http://ip.cn"]
CMD -i
2、执行的是["curl","-s","-i","http://ip.cn"]
FROM centos
Run yun install -y curl
ENTRYPOINT["curl","-s","http://ip.cn"]
CMD -i

3、这类被构建时打印父类信息

[code]FROM centos
RUN yum install -y curl
ENTRYPOINT ["curl","-s","http://ip.cn"]
ONBUILD RUN echo "father images onbuild----88"

 4、添加mysql

5、启动redis

 本地镜像推送到阿里云

申请阿里云账号后,进入下面设置界面,获取推送镜像方法

https://cr.console.aliyun.com/repository

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: