首先了解下Docker的百度释义:
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
组成
一个完整的Docker有以下几个部分组成:
DockerClient客户端
Docker Daemon守护进程
Docker Image镜像
DockerContainer容器
架构
起源
Docker 是 PaaS 提供商 dotCloud 开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于go语言并遵从Apache2.0协议开源。Docker自2013年以来非常火热,无论是从 github 上的代码活跃度,还是Redhat在RHEL6.5中集成对Docker的支持, 就连 Google 的 Compute Engine 也支持 docker 在其之上运行。
历史
docker-ce 社区
docker 是还没商业化之前的版本。
docker-ee 是从17版本开始的。docker默认c7安装的是13版本的。从17年开始有的ee商业版本。
yum install docker-ce | docker| docker-ee 是有区别的的!!!!
1、命令
基础信息
docker -v #查看版本号
docker version # 查看详细版本信息,重点包括cc还是ce版本
docker info #查看容器的运行详细信息
查看本地镜像
docker images
docker image ls
docker search + 镜像名字 搜索镜像
看容器相关
docker ps 查看所有容器
docker inspect 容器名字 查看容器本身的详细信息
docker log 容器名字 容器里面一定有执行的程序,这个就是查看程序的输出结果。
导入导出 - 删除新建
导出镜像:
docker image save centos > docker-centos6.9.tar.gz
导入镜像:
docker image load -i docker-centos6.9.tar.gz
构建镜像, 当前目录有Dockerfile 此名字的文件!
docker build -t nginx:test . #名字需要自己指定
删除镜像:
docker image rm centos:latest
docker image rm 578c3
推送指定镜像到docker镜像源服务器(默认从官方仓库获取)
(docker login #需要先登录仓库)
一般会tag一个带ip的标签给镜像,会重新复制一份,如果不带版本,默认latest,没有此版本会报错。
然后直接用命令推送
docker tag nginx:latest 10.0.0.11:80/nginx:latest
docker pull daocloud.io/huangzhichong/alpine-cn:latest 拉(不写地址就是默认官方下载)
docker push 10.0.0.11:80/nginx:latest 推
显示一个镜像的历史
docker history image_name
注意:镜像不能直接修改,所以没有修改命令
2、容器相关
容器是一个程序,是从镜像启动的。一个镜像如果没有一直执行的程序,容器启动并执行完后就会关闭。
每个容器都是一个微型root文件系统,支持bash登录。
一旦创建容器,就会生成容器的文件。而且会越来越多。记得用容器命令清理不用的容器。
3.创建-启动,删除,停止
注意:it 参数 接收用户输入+伪终端 为后期用户登录容器的作用。
docker create -it ubuntu:latest
docker start af #名字是容器的名字或容器id的前缀都可以
==docker run ubuntu:18.04 /bin/echo 'Hello World'
docker run -p 80:80 -v /data:/data -d nginx:latest #附带端口转发和本地目录挂载
docker run -d -it --name busybox_2 --link busybox_1 busybox /bin/sh -c "while true;do sleep 3600;done" #link命令一般都会重新定义容器为另一个名字,只能自己识别,并且是单向的。
注意:一般是-itd参数 d是后台运行,不会应为操作的终端退出而终止。
docker rm 容器名字
docker stop 容器名字
操作容器-登录,查看,修改
官方推荐 多终端同时登录,会自动同步,一旦一个终端卡住,所有无法使用
docker attach [--detach-keys[=[]]] [--no-stdin] [--sig-proxy[=true]] CONTAINER
常用登录方式
docker exec [-d|--detach] [--detach-keys[=[]]] [-i|--interactive] [--privileged] [-t|--tty] [-u|--user[=USER]] CONTAINER COMMAND [ARG...]
docker exec -it 243c32535da7 /bin/bash
注意:容易混淆的概念 run针对的是镜像 exec是容器。第一次创建容器的时候可以用run进入容器。之后再用这个命令就是重复创建并进入。
exec 就是进入容器
#因为都是bash 的界面容易混淆。run后面不写会有默认的启动命令,但是exec不写就报错。
后面可以直接写 容器里面有的命令,直接操作容器。
docker run -it nginx:latest /bin/bash
docker exec -it 243c32535da7 /bin/bash
拷贝
docker cp 文件 容器id:目录 直接拷贝文件。不能用*,会报错。
容器的备份恢复
docker commit -a "cheng" -m "add file" nginx01 增加作者和描述把容器保存为镜像。
注意:import方式,会破坏原来的镜像分层,只保留最后一层,一般不用。
导入
docker export -o hello1.tar a4d
docker export a4d > hello2.tar
导出
docker import 镜像名字 容器名字
save load方式,常用。
docker save -o nginx.tar nginx:latest
docker save > nginx.tar nginx:latest
docker load -i nginx.tar
docker load < nginx.tar
多容器启动程序
使用 Dockerfile 定义应用程序的环境。
使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
最后,执行 docker-compose up 命令来启动并运行整个应用程序。
网络
加入同一网络的容器,互ping 主机名是可以通的。
docker network create -d bridge test-net
docker run -itd --name test1 --network test-net ubuntu /bin/bash
docker run -itd --name test2 --network test-net ubuntu /bin/bash
docker network ls
登录容器,互ping是可以通的。