关于Docker:
Docker是Docker.Inc公司开源的一个基于轻量级虚拟化技术的容器引擎项目,整个项目基于Go语言开发,并遵从Apache 2.0协议。通过分层镜像标准化和内核虚拟化技术,Docker使得应用开发者和运维工程师可以以统一的方式跨平台发布应用,并且以几乎没有额外开销的情况下提供资源隔离的应用运行环境。
容器和虚拟机的区别:
Docker的优点:
Docker的三个重要组成部分:
镜像
Docker的镜像好比就是一个容器,就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。
例如:运行拉取nginx.img ------>run(运行)------>叫做nginx的容器(提供服务)。
容器
Docker利用容器技术可以运行一个或者多个应用,通过镜像来创建的。
它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。
可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。
容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。
仓库
存放镜像的地方,公有的仓库:Docker Hub 阿里云 网易云 华为云务。
也可以自己搭建一个私有的仓库。
Docker的默认安装目录是 /var/lib/docker
进行清空旧版docker和依赖
yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
安装阿里云的Docker源
yum-config-manager
–add-repo
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装最新版本的 Docker Engine-Community 和 containerd
yum install docker-ce docker-ce-cli containerd.io
启动Docker并放到后台运行
systemctl enable docker && systemctl start docker
安装镜像加速器
可以提升拉去镜像的速度,国内有阿里、网易、科大这些云厂商都在提供镜像加速器服务,本文选择安装阿里云的镜像加速器。
①打开阿里镜像服务的网址::https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
然后记录图中的地址。
②在Docker写入配置文件,更换上图获取的地址即可,重启Docker服务即可。
cat > /etc/docker/daemon.json << EOF
{
“registry-mirrors”: [“https://dfw6zeux.mirror.aliyuncs.com”]
}
EOF
systemctl daemon-reload && systemctl restart docker
docker version
: 查看版本信息
docker info
: 显示 Docker 系统信息,包括镜像和容器数…
Docker --help
查看帮助信息
docker images : 列出本地镜像
docker images
docker rmi
: 删除本地一个或多少镜像。
dicker rmi [镜像ID1]..[镜像ID多个]
docker tag
: 标记本地镜像,将其归入某一仓库,也叫打标签,形成一个新的镜像。
docker tag [镜像名:镜像版本] [新的镜像名:新的镜像版本]
docker build
:命令用于使用 Dockerfile 创建镜像。
使用该命令之前 ,应该需要在指定目录有Dockerfile文件
docke build [参数] [Docker的目录]
参数列表
-t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
--cpu-shares :设置 cpu 使用权重;
--cpu-period :限制 CPU CFS周期;
--cpu-quota :限制 CPU CFS配额;
--cpuset-cpus :指定使用的CPU id;
--cpuset-mems :指定使用的内存 id;
--disable-content-trust :忽略校验,默认开启;
-f :指定要使用的Dockerfile路径;
--isolation :使用容器隔离技术;
--label=[] :设置镜像使用的元数据;
-m :设置内存最大值;
--memory-swap :设置Swap的最大值为内存+swap,"-1"表示不限swap;
--no-cache :创建镜像的过程不使用缓存;
-q :安静模式,成功后只输出镜像 ID;
-shm-size :设置/dev/shm的大小,默认值是64M;
--ulimit :Ulimit配置。
--squash :将 Dockerfile 中所有的操作压缩为一层。
--network: 默认 default。在构建期间设置RUN指令的网络模式
例如
[root@localhost ~]# vim dockerfile
FROM nginx
RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html
[root@localhost ~]# docker build -t nginxtest:v1.0 .
-t : 后面是新的镜像名字和标签 “.” Dockerfile是在当前的目录
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginxtest v1.0 dcb60ca8b3d8 2 minutes ago 133MB
Dockerfile
:构建容器的文件.
docker -H history
: 查看指定镜像的创建历史。
[root@localhost ~]# docker history -H [镜像ID]
docker save -o
: 将指定镜像保存成 tar 归档文件。
docker save -o 命名.tar [镜像名:镜像版本 或者 镜像ID]
例如
[root@localhost ]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginxtest v1.0 dcb60ca8b3d8 24 minutes ago 133MB
[root@localhost ]# docker save -o nginxtest.tar dcb60ca8b3d8
root@localhost ]# ll -h
-rw------- 1 root root 131M 3月 14 21:24 nginxtest.tar
docker load
: 导入使用 docker save 命令导出的镜像。
docker load [参数]
[root@localhost test]# docker load < nginxtest.tar
或
[root@localhost test]# docker load -i nginxtest.tar
docker import
: 从归档文件中创建镜像。
docker import [镜像包] [新的镜像名:标签]
[root@localhost test]# docker import nginxtest.tar nginx:v1.0
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost test]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx v1.0 eac8ab518808 22 seconds ago 137MB
export 和 import 导出的是一个容器的快照, 不是镜像本身, 也就是说没有 layer。
你的 dockerfile 里的 workdir, entrypoint 之类的所有东西都会丢失,commit 过的话也会丢失。
快照文件将丢弃所有的历史记录和元数据信息(即仅保存容器当时的快照状态),而镜像存储文件将保存完整记录,体积也更大。
docker save 保存的是镜像(image),docker export 保存的是容器(container);
docker load 用来载入镜像包,docker import 用来载入容器包,但两者都会恢复为镜像;
docker load 不能对载入的镜像重命名,而 docker import 可以为镜像指定新名称。
docker ps -a
: 列出容器
docker inspect
: 获取容器/镜像的元数据。
docker inspect [容器ID]或[容器名]
docker start
启动容器 docker stop
停止容器 docker kill
强行终止容器
docker start -itd --restart=always [容器ID] /bin/bash
-i :标准输入输出
-t:分配一个终端或控制台
-d 后台运行容器,并返回容器ID
--restart=always:容器随docker engine自启动,因为在重启docker的时候默认容器都会被关闭
docker -rm
:删除一个或多个容器。
删除所有已经停止的容器:
docker rm $(docker ps -a -q)
删除容器 nginx01, 并删除容器挂载的数据卷:
docker rm -v nginx01
强制删除容器 ngxin02
docker rm -f nginx02
docker -p
: 映射端口
docker -p 8888:80 主机8888端口映射容器80端口
docker -p 随机映射
docker attach
:docker exec
连接到正在运行中的容器。
docker exec -itd [容器ID]或[容器名] /bin/bash
docker exit
Ctrl+p+q
退出容器
exit:退出并结束容器内的应用进程
Ctrl+p+q:退出容器交互界面
docker pause
:暂停容器中所有的进程。
docker unpause
:恢复容器中所有的进程。
docker logs
: 获取容器的日志
docker logs [参数] [容器名或ID]
-f : 显示实时日志
--since :显示某个开始时间的所有日志
-t : 显示时间戳
--tail :仅列出最新N条容器日志
docker export -o
:将容器 归档 [快照] 成一个tar文件
docker export -o 命名文件.tar [容器ID]
docker top
:查看容器中运行的进程信息。
docker top [容器ID]或[容器名]
查看所有容器的进程
for i in `docker ps |grep Up|awk '{print $1}'`;do echo &&docker top $i; done
docker commit
:从容器创建一个新的镜像。
docker commit [参数] [容器ID] [新的镜像名:标签]
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
848908c20f36 nginx "/docker-entrypoint.…" 6 minutes ago Up 2 minutes 0.0.0.0:80->80/tcp ngixn
[root@localhost ~]# docker commit -a "king" -m "my test" 848908c20f36 ngxintest:v1.0
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ngxintest v1.0 50b4321ff10b 8 seconds ago 133MB
docker cp
:用于容器与主机之间的数据拷贝。
docker cp [主机目录] [容器ID:目录]
docker cp /www/runoob 96f7f14e99ab:/www/
或
docker cp 96f7f14e99ab:/www/ /www/runoob
docker diff
: 检查容器里文件结构的更改。
[root@localhost ~]# docker diff [容器ID]
docker login
: 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
docker logout
: 退出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
登陆到Docker Hub
docker login -u 用户名 -p 密码
登出Docker Hub
docker logout
docker pull
: 从镜像仓库中拉取或者更新指定镜像
从Docker Hub下载ngixn镜像。
docker pull -a nginx:1.6 (不加标签默认最新版本)
从Docker Hub下载ngixn所有镜像。
docker pull -a nginx
docker push
: 将本地的镜像上传到镜像仓库,要先登陆到镜像仓库
上传本地镜像ngxintest:v8.8到镜像仓库中。
docker push ngixntest:v8.8
docker search
: 从Docker Hub查找镜像
从 Docker Hub 查找所有镜像名包含ngxin,并且收星星大于 1000 的镜像
docker search -f stars=1000 nginx