目录
1、docker与虚拟机的对比
2、Docker的镜像、容器、仓库
3、标签(Tag)、Dockfile、docker-compose.yml
4、docker run命令详解
5、docker相关命令
二、相关问答
1、docker image 与 docker images的不同?
2、docker run 与 docker start的不同?
3、docker stop 与 docker kill的不同?
4、Docker构建镜像有哪两种方式?
三、Docker安装配置
1、docker安装使用指南
2、Docker安装
3、下载
4、安装
5、设置加速服务
6、查看版本:docker version
四、Docker搭建web服务器
1、首先拉取centos镜像
2、安装Nginx源
3、安装Nginx
4、查看Nginx路径,启动Nginx
5、访问Web服务器Nginx
五、Docker搭建自己的镜像
1、创建Dockerfile文件
2、编写Dockerfile文件的代码
3、Dockerfile指令详解
4、docker build命令构建镜像
5、查看新构建的镜像
一、简介
|
Docker 由镜像(Image)、容器(Container)、仓库(Repository) 三部分组成。
镜像(Image):1.是创建容器的基础 2.镜像是容器的模版 3.容器是镜像的实例 4.docker images查看本地镜像列表
容器(Container):1.包含了应用及其需要的环境 2.是应用的运行时表现形式 3.docker ps -a查看本地运行过的容器
仓库(Repository):1.存放镜像的地方 2.推送(push)与拉取(pull)
===>官方仓库:https://hub.docker.com
===>阿里云仓库:https://cr.console.aliyun.com
标签(Tag):1.镜像版本号 2.mysl:latest 或 mysql:8
Dockfile:1.镜像描述文件 2.基于Dockfile生成镜像
docker-compose.yml:1.容器编排,同时管理多个容器 2.同时创建,运行,销毁多个容器
runoob@runoob:~$ docker run -it nginx:latest /bin/bash
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
02.
03. -d, --detach=false 指定容器运行于前台还是后台,默认为false
04. -i, --interactive=false 打开STDIN,用于控制台交互
05. -t, --tty=false 分配tty设备,该可以支持终端登录,默认为false
06. -u, --user="" 指定容器的用户
07. -a, --attach=[] 登录容器(必须是以docker run -d启动的容器)
08. -w, --workdir="" 指定容器的工作目录
09. -c, --cpu-shares=0 设置容器CPU权重,在CPU共享场景使用
10. -e, --env=[] 指定环境变量,容器中可以使用该环境变量
11. -m, --memory="" 指定容器的内存上限
12. -P, --publish-all=false 指定容器暴露的端口
13. -p, --publish=[] 指定容器暴露的端口
14. -h, --hostname="" 指定容器的主机名
15. -v, --volume=[] 给容器挂载存储卷,挂载到容器的某个目录
16. --volumes-from=[] 给容器挂载其他容器上的卷,挂载到容器的某个目录
17. --cap-add=[] 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities
18. --cap-drop=[] 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities
19. --cidfile="" 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
20. --cpuset="" 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
21. --device=[] 添加主机设备给容器,相当于设备直通
22. --dns=[] 指定容器的dns服务器
23. --dns-search=[] 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
24. --entrypoint="" 覆盖image的入口点
25. --env-file=[] 指定环境变量文件,文件格式为每行一个环境变量
26. --expose=[] 指定容器暴露的端口,即修改镜像的暴露端口
27. --link=[] 指定容器间的关联,使用其他容器的IP、env等信息
28. --lxc-conf=[] 指定容器的配置文件,只有在指定--exec-driver=lxc时使用
29. --name="" 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
30. --net="bridge" 容器网络设置:
31. bridge 使用docker daemon指定的网桥
32. host //容器使用主机的网络
33. container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
34. none 容器使用自己的网络(类似--net=bridge),但是不进行配置
35. --privileged=false 指定容器是否为特权容器,特权容器拥有所有的capabilities
36. --restart="no" 指定容器停止后的重启策略:
37. no:容器退出时不重启
38. on-failure:容器故障退出(返回值非零)时重启
39. always:容器退出时总是重启
40. --rm=false 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
41. --sig-proxy=true 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理
docker命令大全,点击command可直接跳转到官方链接。
Command | Description | 中文解释 |
---|---|---|
docker attach | Attach local standard input, output, and error streams to a running container | 将本地标准输入,输出和错误流附加到正在运行的容器 |
docker build | Build an image from a Dockerfile | 从Dockerfile构建映像 |
docker builder | Manage builds | 管理构建 |
docker checkpoint | Manage checkpoints | 管理检查点 |
docker commit | Create a new image from a container’s changes | 根据容器的更改创建新镜像 |
docker config | Manage Docker configs | 管理Docker配置 |
docker container | Manage containers | 管理容器 |
docker cp | Copy files/folders between a container and the local filesystem | 在容器和本地文件系统之间复制文件/文件夹 |
docker create | Create a new container | 创建一个新的容器 |
docker deploy | Deploy a new stack or update an existing stack | 部署新堆栈或更新现有堆栈 |
docker diff | Inspect changes to files or directories on a container’s filesystem | 检查容器文件系统上文件或目录的更改 |
docker engine | Manage the docker engine | 管理Docker引擎 |
docker events | Get real time events from the server | 从服务器获取实时事件 |
docker exec | Run a command in a running container | 在正在运行的容器中运行命令 |
docker export | Export a container’s filesystem as a tar archive | 将容器的文件系统导出为tar存档 |
docker history | Show the history of an image | 显示镜像的历史记录 |
docker image | Manage images | 管理镜像 |
docker images | List images | 列出镜像 |
docker import | Import the contents from a tarball to create a filesystem image | 从tarball导入内容以创建文件系统映像 |
docker info | Display system-wide information | 显示系统范围的信息 |
docker inspect | Return low-level information on Docker objects | 返回有关Docker对象的底层信息 |
docker kill | Kill one or more running containers | 杀死一个或多个正在运行的容器 |
docker load | Load an image from a tar archive or STDIN | 从tar存档或STDIN加载镜像 |
docker login | Log in to a Docker registry | 登录Docker注册表 |
docker logout | Log out from a Docker registry | 从Docker注册表注销 |
docker logs | Fetch the logs of a container | 提取容器的日志 |
docker manifest | Manage Docker image manifests and manifest lists | 管理Docker映像清单和清单清单= |
docker network | Manage networks | 管理网络 |
docker node | Manage Swarm nodes | 管理Swarm节点 |
docker pause | Pause all processes within one or more containers | 暂停一个或多个容器中的所有进程 |
docker plugin | Manage plugins | 管理插件 |
docker port | List port mappings or a specific mapping for the container | 列出端口映射或容器的特定映射 |
docker ps | List containers | 列出容器 |
docker pull | Pull an image or a repository from a registry | 从注册表中提取镜像或存储库 |
docker push | Push an image or a repository to a registry | 将映像或存储库推送到注册表 |
docker rename | Rename a container | 重命名容器 |
docker restart | Restart one or more containers | 重新启动一个或多个容器 |
docker rm | Remove one or more containers | 删除一个或多个容器 |
docker rmi | Remove one or more images | 删除一个或多个镜像 |
docker run | Run a command in a new container | 在新容器中运行命令 |
docker save | Save one or more images to a tar archive (streamed to STDOUT by default) | 将一个或多个镜像保存到tar存档(默认情况下流式传输到STDOUT) |
docker search | Search the Docker Hub for images | 在Docker Hub中搜索镜像 |
docker secret | Manage Docker secrets | 管理Docker密钥 |
docker service | Manage services | 管理服务 |
docker stack | Manage Docker stacks | 管理Docker堆栈 |
docker start | Start one or more stopped containers | 启动一个或多个已停止的容器 |
docker stats | Display a live stream of container(s) resource usage statistics | 显示实时的容器资源使用情况统计流 |
docker stop | Stop one or more running containers | 停止一个或多个运行中的容器 |
docker swarm | Manage Swarm | 管理群 |
docker system | Manage Docker | 管理Docker |
docker tag | Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE | 创建引用了SOURCE_IMAGE的标签TARGET_IMAGE |
docker top | Display the running processes of a container | 显示容器的运行过程 |
docker trust | Manage trust on Docker images | 管理对Docker映像的信任 |
docker unpause | Unpause all processes within one or more containers | 取消暂停一个或多个容器中的所有进程 |
docker update | Update configuration of one or more containers | 更新一个或多个容器的配置 |
docker version | Show the Docker version information | 显示Docker版本信息 |
docker volume | Manage volumes | 管理卷 |
docker wait | Block until one or more containers stop, then print their exit codes | 阻塞直到一个或多个容器停止,然后打印其退出代码 |
docker image(管理镜像) 与 docker images(列出镜像)
docker run = docker create + docker start
docker run 每次使用都会创建一个新的容器
docker start 重新启动已存在的镜像
上左图:第一次启动docker run,Docker首先在本机中寻找该镜像,如果没有安装,Docker 在 Docker Hub 上查找该镜像并下载安装到本机,最后 Docker 创建一个新的容器并启动该程序(本机查找---Docker Hub查找---下载安装到本机---创建容器---启动程序)。上右图:当第二次执行 docker run 时,因为 Docker 在本机中已经安装该镜像,所以 Docker 会直接创建一个新的容器并启动该程序。注意的是,docker run 每次使用都会创建一个新的容器,因此,我们以后再次启动这个容器时,只需要使用命令 docker start 即可。Docker 容器重启后会沿用 docker run
命令指定的参数来运行,但是,此时它还是后台运行的。我们必须通过 docker attach
命令切换到运行交互式容器
docker stop 发送 SIGTERM 信号,而 docker kill 发送SIGKILL 信号。
一种方式是使用docker commit命令,另外一种方式使用docker build命令和Dockerfile文件。
不推荐使用docker commit命令进行构建,因为它没有使得整个流程标准化。建议使用Dockerfile文件可以让构建镜像更具备可重复性,同时保证启动脚本和运行程序的标准化。
官方指南:https://docs.docker.com/install/
阿里云指南:https://yq.aliyun.com/articles/110806?spm=5176.8351553.0.0.468b1991jdT95t
先在https://hub.docker.com/注册账号。
官方下载地址(Mac):https://download.docker.com/mac/stable/Docker.dmg
阿里云下载地址(Mac):http://mirrors.aliyun.com/docker-toolbox/mac/docker-for-mac/?spm=5176.8351553.0.0.468b1991jdT95t
阿里云下载地址(Windows): http://mirrors.aliyun.com/docker-toolbox/windows/docker-for-windows/
双击刚刚下载的 Doker.dmg 安装包进行安装。安装完成后启动, Mac 顶部导航栏出现了一个图标,通过菜单可以进行 docker 配置和退出等操作。
右键点击桌面顶栏的 docker 图标,选择 Preferences ,在 Daemon 标签(Docker 17.03 之前版本为 Advanced 标签)下的 Registry mirrors 列表中将https://xxx.mirror.aliyuncs.com 加到"registry-mirrors"的数组里,点击 Apply & Restart 按钮,等待 Docker 重启并应用配置的镜像加速器。
详见:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
docker run -p 80 --name web -i -t centos /bin/bash
--name web |
告诉Docker创建一个名称是web的容器,如果不指定,Docker会为我们创建的每一个容器自动生成一个随机的名称 |
-p 80 |
告诉Docker开放80端口 |
-i |
告诉Docker容器保持标准输入流对容器开放,即使容器没有终端连接 |
-t |
告诉Docker为容器分配一个虚拟终端,以便于我们接下来安装 Nginx 服务器 |
-d |
告诉Docker在后台运行容器的守护进程 |
其中,docker run详见 三(2) 的解析
rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install -y nginx
whereis nginx:可以看到安装的路径了,将Nginx跑起来:nginx
执行ctrl+P+Q切换到后台,然后通过docker ps -a来查看随机分配的端口。如下分配的端口是32769 ,那么通过浏览器访问http://127.0.0.1:32769即可。
mkdir dockerfile_test
cd dockerfile_test/
touch Dockerfile
nano Dockerfile
其中,nano实际就是进去编辑,跟vi差不多。
FROM centos:7
MAINTAINER LiangGzone "[email protected]"
RUN rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
RUN yum install -y nginx
EXPOSE 80
FROM centos:7 | Docker 需要依赖于一个基础镜像进行构建。这里,我们指定 centos 作为基础镜像,它的版本是 7 (CentOS 7)。 |
MAINTAINER LiangGzone "[email protected]" | 指定该镜像的作者是 LiangGzone,邮箱是 [email protected]。这有助于告诉使用者它的作者和联系方式。 |
EXPOSE 80 | 暴露 Dokcer 容器的 80 端口 |
docker build -t="lianggzone/nginx_demo:v1" .
- t 告诉 Docker 镜像的名称和版本。 |
没有指定任何标签,Docker 将会自动为镜像设置一个 lastest 标签。 |
最后还有一个 . 是为了让 Docker 到当前本地目录去寻找 Dockerfile 文件。 |
Docker 会在每一步构建都会将结果提交为镜像,然后将之前的镜像层看作缓存,因此我们重新构建类似的镜像层时会直接复用之前的镜像。如果我们需要跳过,可以使用 --no-cache 选项告诉 Docker 不进行缓存。 |