Docker入门(不用入土)

了解Docker

Docker

概述

Docker官网

  • 啥是Docker:
    • Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
    • Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
    • 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
    • Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。
  • Docker的优点有啥:
    • Docker容器虚拟化,意味着:
      1.环境隔离:
      通过cgroups和namespace进行实现资源的隔离,实现一个机器运行多个容器互不影响。
      2.更快速的交付部署:
      利用Docker,开发人员可以使用镜像快速构建一套标准的开发环境;开发完成后,测试运维人员可以直接使用相同的环境部署代码。Docker可以快速创建和删除容器,节省大量部署时间。
      3.资源利用高效:
      Docker容器的运行不需要额外的虚拟化管理程序的支持,它是内核级的虚拟化,可以实现更高的性能。
      4.移迁移扩展:
      docker的容器几乎可以在任意的平台下运行。
  • 虽然现在看的云里雾里,但随着我们的后续学习,会对这些优势有一点程度上的理解

安装Docker

  • 略,详见网上的各种教程
  • 笔者的docker安装在centos7服务端

虚拟化与Docker

虚拟化与Docker
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。

Docker 容器通过 Docker 镜像来创建。

容器与镜像的关系类似于面向对象编程中的对象与类。

概念 描述
Docker 镜像(Images) Docker 镜像是用于创建 Docker 容器的模板。
Docker 容器(Container) 容器是独立运行的一个或一组应用。
Docker 客户端(Client) Docker 客户端通过命令行或者其他工具使用 Docker API与Docker 的守护进程通信
Docker 主机(Host) 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
Docker 仓库(Registry) Docker 仓库用来保存镜像,可以理解为代码控制中的代码仓库。DockerHub 提供了庞大的镜像集合供使用

使用Docker

镜像操作

1.获取镜像

docker pull<域名> / <namespace> / <repo>;<tag>

镜像是Docker运行容器的前提
用户可以从网络上下载镜像,若不指定tag,则会默认选择lastest的标签,即下载最新版(和git pull;git tag有点相似)
默认从docker官方下载,不需指定命名空间

[root@VM_0_4_centos docker]# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
6abc03819f3e: Pull complete
05731e63f211: Pull complete
0bd67c50d6be: Pull complete
Digest:sha256:f08638ec7ddc90065187e7eabdfac3c9
6e5ff0f6b2f1762cf31a4f49b53000a5
Status: Downloaded newer image for ubuntu:latest

2.查看镜像列表

docker images

列出本地主机上的已有镜像
表格信息含义为:来自于哪个仓库,镜像标签信息,镜像id(唯一),创建时间,大小

[root@VM_0_4_centos docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 7698f282e524 2 weeks ago 69.9MB
hello-world latest fce289e99eb9 5 months ago 1.84kB

3.查看镜像信息

docker inspect<image_id>

返回json格式的信息,如果我们只看一项,使用-f指定

[root@VM_0_4_centos docker]# docker inspect fce289e99eb9
[
{
“Id”: “sha256:fce289e99eb9bca977dae136fbe2a82b6b7d
4c372474c9235adc1741675f587e”,
“RepoTags”: [
“hello-world:latest”
],
“RepoDigests”: [
“hello-world@sha256:0e11c388b664df8a27a901dce21eb89f1
1d8292f7fca1b3e3c4321bf7897bffe”
],
“Parent”: “”,

[root@VM_0_4_centos docker]# docker inspect -f{{.Id}} fce289e99eb9
sha256:fce289e99eb9bca977dae136fbe2a82b6b7d4
c372474c9235adc1741675f587e

注意我们指定时用的是**{{.xx}}**, 点不要漏了

4.查找镜像
docker search <image_name>
可以搜索远端仓库中的共享镜像,默认搜索Docker hub官方仓库的镜像

5.删除镜像

docker rmi <image>; <tag>

img可以指定为标签或id
当一个镜像有多个标签时,只是删除其中的一个指定标签,不影响镜像文件
当只有一个tag时,删tag就是删镜像本身
当有该镜像的容器存在时,镜像文件无法被删除

[root@VM_0_4_centos docker]# docker tag fce289e99eb9 cyx:hello-world
[root@VM_0_4_centos docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 7698f282e524 2 weeks ago 69.9MB
cyx hello-world fce289e99eb9 5 months ago 1.84kB
hello-world latest fce289e99eb9 5 months ago 1.84kB
[root@VM_0_4_centos docker]# docker rmi cyx:hello-world
Untagged: cyx:hello-world
[root@VM_0_4_centos docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 7698f282e524 2 weeks ago 69.9MB
hello-world latest fce289e99eb9 5 months ago 1.84kB

试图删除hello-world

[root@VM_0_4_centos docker]# docker rmi hello-world
Error response from daemon: conflict: unable to remove repository reference “hello-world” (must force) - container 16aafe3a6ff9 is using its referenced image fce289e99eb9

错误,仍有容器在运行这个镜像,不建议-f,会让你的容器找不到镜像,导致混乱

6.创建镜像
docker commit <options> <container_id> <repository:tag>
-a, --auther:作者信息
-m, --message:提交信息
-p, --pause=true: 提交时暂停容器运行
(炒鸡像git)

[root@VM_0_4_centos docker]# docker run -ti ubuntu bash
root@8da371140128:/# touch test.txt
root@8da371140128:/# vi test.txt
bash: vi: command not found
root@8da371140128:/# echo

root@8da371140128:/# echo “test” > test.txt
root@8da371140128:/# cat test.txt
test
root@8da371140128:/# ls
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys test.txt tmp usr var
root@8da371140128:/# exit
exit
运行Ubuntu,-ti把容器内标准绑定到终端并运行bash,发现这个操作系统里很多命令都没有,只保留了很少系统运行的参数

[root@VM_0_4_centos docker]# docker commit -a"cyx" -m “add test.txt” 8da371140128 cyx/test
sha256:036f85781fd0c78066f957d3fe809d8c48
19f9cad5979d832a8f130e6cbb8c74
[root@VM_0_4_centos docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cyx/test latest 036f85781fd0 4 seconds ago 69.9MB
ubuntu latest 7698f282e524 2 weeks ago 69.9MB
hello-world latest fce289e99eb9 5 months ago 1.84kB

7.迁出镜像
docker save -o <image>.tar<image>:<tag>

-o为设置存储压缩后的文件名称
image可以为标签或id

8.载入镜像
docker load --input<image>.tar 或 docker load < <image>.tar
会导入镜像的相关数据信息,包括标签

9.上传镜像

docker push <域名>/<namespace>/<repo>:<tag>
可能会需要登陆
使用docker login

[root@VM_0_4_centos docker]# docker save -o test.tar 036f85781fd0
[root@VM_0_4_centos docker]# docker rmi 036f85781fd0
Untagged: cyx/test:latest
Deleted: sha256:036f85781fd0c78066f957d3fe8
09d8c4819f9cad5979d832a8f130e6cbb8c74
Deleted: sha256:8978e7051b78201de4a5fff1b3
e1a45ef22947123424c471ac3c701b8653f005
[root@VM_0_4_centos docker]# docker load < test.tar
bb370513b24b: Loading layer [==================================================>] 3.584kB/3.584kB
Loaded image ID: sha256:036f85781fd0c78066f957d3fe809d8c4819f9
cad5979d832a8f130e6cbb8c74
[root@VM_0_4_centos docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
<none> <none> 036f85781fd0 10 minutes ago 69.9MB
ubuntu latest 7698f282e524 2 weeks ago 69.9MB
hello-world latest fce289e99eb9 5 months ago 1.84kB
[root@VM_0_4_centos docker]# docker tag 036f85781fd0 “cyx/test”
[root@VM_0_4_centos docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
cyx/test latest 036f85781fd0 11 minutes ago 69.9MB
ubuntu latest 7698f282e524 2 weeks ago 69.9MB
hello-world latest fce289e99eb9 5 months ago 1.84kB

导入是没有设定库和tag,这时我们重新命名一下就好

[root@VM_0_4_centos docker]# docker tag 036f85781fd0 “cyxfree/test”
[root@VM_0_4_centos docker]# docker push cyxfree/test
The push refers to repository [docker.io/cyxfree/test]
bb370513b24b: Pushed
8d267010480f: Pushed
270f934787ed: Pushed
02571d034293: Pushed
latest: digest: sha256:92bcfc7a5946eccc845c88491ca
250b6957e099872af320e1ae4de3941ab004b
size: 1150

注意,push后面跟的cyxfree/test是你的仓库名,如果没有这个远程仓库,则会创建一个
正常情况下为push (username)/(repository):tagname, 默认是最新的

PS:

  • makedown < 需要转义为&lt 再加个;
  • hexo 有个bug “}}”不在代码块要添加你的内容, 不然会出错(是解释成模板了吗,不懂)

Docker入门(不用入土)

http://cyx0706.github.io/2019/06/05/docker-1/

Author

Ctwo

Posted on

2019-06-05

Updated on

2019-08-04

Licensed under

Comments