Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
docker基本组成
什么是镜像?
它是一个分层存储的文件,是一个软件环境,一个镜像可以创建多个容器,一种标准化的交付,一个不包含liunx内核的精简的操作系统。
镜像与容器的关联:
一个镜像可包含多个容器,容器是在镜像的最上面加了一层读写层,镜像里面的文件改动时,它不会直接改动镜像,而是将要改动的文件拷贝到读写层,如果容器删除了,最上面的读写层也就删除了,改动也就丢失了,所以无论多少个容器共享一个镜像,所做的写操作都是从镜像的文件系统中复制过来操作的,并不会修改镜像的源文件,这种方式提高了磁盘的利用率。如果想持久化这些改动,可以通过docker commit将容器保存成一个新镜像。
1.yum包更新到最新
yum update
2.安装需要的软件包,yum-util提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
3.设置yum源为阿里云
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
也可直接下载repo (https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo)
4.安装
yum install docker-ce 社区版
检查是否安装成功 docker -v
ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。
https://lug.ustc.edu.cn/wiki/mirrors/help/
编辑该文件,也就是配置加速器:
[root@gang ~]# mkdir -p /etc/docker
[root@gang ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
启动docker:
[root@gang ~]# systemctl start docker
查看docker相关信息:
docker info
查看docker的帮助文档:
docker --help
docker images -----查看镜像
docker search centos ----搜索镜像
docker pull centos:7 -------拉取centos7的镜像 , 默认从官方仓库中下载
docker rmi 镜像id -------删除镜像
docker tag centos:7 mycentos:7 复制一个一模一样的docker镜像
docker rmi
docker images -q
删除所有的镜像
docker inspect eeb6ee3f44bd-----查看镜像的详细信息
docker image prune —清理镜像,加一个-a参数是删除无用的镜像,不光是临时镜像
一般来说,镜像的latest标签意味着该镜像的内容会跟踪最新版本的变化而变化,内容不稳定。因此,生产环境中,不要使用latest标签
docker ps ----------查看正在运行的容器
docker ps -a ----------查看正在运行的容器
docker ps -l -----------查看最后一次正在运行的容器
docker logs id --------查看容器的输出
docker pause 容器名 --------- 暂停容器
docker unpause 容器 --------- 恢复容器
1.存出镜像
如果要导出镜像到本地文件,使用docker 【image】save命令。该命令支持-o,-output string参数。
例如导出本地centos:7镜像为文件centos_7.tar:
docker save -o centos_7.tar centos:7
2.载入镜像
可以使用docker 【image】 load将导入的tar文件再导入到本地镜像库。支持-i,-input string选项。
例如,从文件centos_7.tar导入镜像到本地镜像列表:
docker load -i centos_7.tar
或者docker load < centos_7.tar
3.上传镜像
使用docker 【image】 push命令上传到镜像到仓库,默认上传到docker Hub官方仓库(需要登录),用户在docker Hub网站注册后可以上传自制镜像。
Docker Hub地址:https://hub.docker.com
我用的阿里云上传镜像。
创建容器命令 docker run
以it参数登录进入docker容器后,退出后,容器也会停止运行
docker run -it --name=mycentos centos:7 比如进入容器
以守护进程运行docker后,exit后,还在运行
[root@gang ~]# docker run -di --name=centos2 centos:7 [root@gang ~]# docker exec -it centos2 /bin/bash
docker stop id ------------停止docker
docker start id --------------启动docker
docker rm id --------------删除容器
docker inspect centos2 —查看容器相关信息
docker stats id ---------查看统计信息
把宿主的文件拷贝到容器中:
docker cp mysql-community-client-5.7.28-1.el7.x86_64.rpm 780bf320d4cb:/
把容器的文件拷贝到宿主的中
docker cp 780bf320d4cb:/mysql-community-client-5.7.28-1.el7.x86_64.rpm ~/
查看变更
docker diff 容器id
查看端口映射
docker port 容器
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器添加-v参数后边为宿主机目录:容器目录,例如:
docker run -di -v /data/file/:/data --name=centos3 centos:7
有时候我们需要将容器从一个系统迁移到另外一个系统,可以利用docker的导入和导出功能。
1.导出容器
导出容器是指导出一个已经创建的容器到一个文件,不管此时这个容器是否处于运行状态。可以使用docker 【container】 export命令:
docker export -o test.tar centos3
或者
docker export centos3 > tt.tar
2.导入容器
导出的文件又可以使用docker 【container】 import 命令导入变成镜像:
docker import test.tar --test/ununtu:v1.0
1.使用registry镜像创建私有云仓库
安装docker后,可以通过官方提供的registry镜像来搭建一套本地私有仓库环境:
[root@gang ~]# docker pull registry
[root@gang ~]# docker run --name registry -p 5000:5000 -v /data/registry:/var/lib/registry -d registry:latest
[root@gang ~]# docker tag busybox:latest 172.28.199.112:5000/busybox:v1
[root@gang ~]# docker push 172.28.199.112:5000/busybox:v1
报错:
The push refers to repository [172.28.199.112:5000/busybox]
Get "https://172.28.199.112:5000/v2/": http: server gave HTTP response to HTTPS client
docker上传下载默认只支持https协议,搭建的私有云仓库是http协议
解决:
[root@gang ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
"insecure-registries":["172.28.199.112:5000"]
}
有兴趣的甚至可以去安装搭建Harbor。
docker pull mysql:5.7
docker run -id --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql:5.7
[root@gang ~]# docker exec -it mysql /bin/bash
bash-4.2# mysql -uroot -proot --default-character-set=utf8
nginx需要修配置文件,就通过挂载解决
[root@gang ~]# docker pull nginx
[root@gang ~]# docker run -id --name=nginx -p 80:80 nginx:latest
91a1b54c2233d9d63ab7cd114c6d83cb1ac1d2df25d254ddb569fa17031d19cb
[root@gang ~]# docker cp nginx:/etc/nginx/ /data/etc/nginx/ 把容器的文件拷贝到宿主机上,挂载目录
[root@gang nginx]# docker stop nginx
nginx
[root@gang nginx]# docker rm nginx
nginx
[root@gang nginx]# docker run -di --name=nginx -p 80:80 -v /data/etc/nginx/:/etc/nginx nginx:latest 创建容器的时候挂载
下一篇请看【docker】之基础篇二。