IT序号网

开始docker知识解答

sanshao 2021年06月13日 程序员 163 0
安装

 
docker 目前只支持64位系统
1.下载并安装,简直太方便了
$ curl -fsSL https://get.docker.com/ | sh
用例

 
1.docker run hello-world 
$ docker run hello-world 
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
需要创建一个用户到docker 组中。
$ sudo usermod -aG docker $(whoami)
$ sudo reboot

注意:需要reboot之后才能使用

 
成功运行
zane@zane-V:~$ sudo docker run hello-world 
  
Hello from Docker! 
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.
 
To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash
 
Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com
 
For more examples and ideas, visit:
 https://docs.docker.com/engine/userguide/
 
  
 
Docker完成hello-world做的动作
  1. Docker客户端联系Docker用例
  2. Docker用例从Docker Hub 中将“hello-world”image 拉下来。
  3. Docker 用例从“hello-world” image 创建一个新的容器。而这个image运行着产生你现在读到的信息的 可执行性文件。
  4. Docker用例再讲这些输出传送到Docker客户端,然后Docker客户端在将这些信息传送到你的屏幕
 
2.docker ps -a 显示系统中所有的容器
zane@zane-V:~$  docker ps -a 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES 
767a0a0f0bae        hello-world         "/hello"            30 minutes ago      Exited (0) 30 minutes ago                       silly_mcnulty 
9e6a3cb1e18b        hello-world         "/hello"            33 minutes ago      Exited (0) 33 minutes ago                       tender_kare 
  
zane@zane-V:~$ docker ps 
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
  • docker ps 仅显示当前正在运行的容器
    • hello-world已经退出因此不会显示
 
Images and Containers

 
Docker 引擎提供的核心技术就是启用images和containers。
 
比如:docker run hello-world命令有以下三个部分:
  • docker
    • 告诉操作系统正在使用docker程序
  • hello-world
    • 告诉docker将hello-world这个image加载到容器
  • run
    • 一个创建运行docker容器的子命令
 
 
Image
  • 是一个文件系统和参数集合,用在运行时。
  • 没有状态也不可以改变
 
Contaniers
  • 一个正运行的image实例
 
 
当执行docker run hello-world,Docker引擎:
  • 检查你是否有hello-world 这个镜像
  • 从Docker Hub下载这个image
  • 加载这个image到container然后运行
 
取决于image的创建,可能是运行简单,单个命令然后退出,就像 hello-world image一样。
当然也可以是像数据库一样复杂的软件,等待存数据,等待下一位使用者等等。
 
Docker引擎可以通过Docker image创建和分享软件
 
寻找运行image

 
可以在Docker Hub中找到全世界所有人创建的image,当然是在Docker Hub中创建的拉。
 
假设找到一个感兴趣的image docker/whalesay,然后直接用就可以啦。
 
第一次运行image时,docker在本地寻找,如果本地没有则到Docker Hub中找。
zane@zane-V:~$  docker run docker/whalesay cowsay boo 
Unable to find image 'docker/whalesay:latest' locally 
latest: Pulling from docker/whalesay 
  
e190868d63f8: Pull complete 
909cd34c6fd7: Pull complete 
0b9bfabab7c1: Pull complete 
a3ed95caeb02: Pull complete 
00bf65475aba: Pull complete 
c57b6bcc83e3: Pull complete 
8978f6879e2f: Pull complete 
8eed3712d2cf: Pull complete 
Digest: sha256:178598e51a26abbc958b8a2e48825c90bc22e641de3d31e18aaf55f3258ba93b 
Status: Downloaded newer image for docker/whalesay:latest 
 _____ 
< boo > 
 ----- 
    \ 
     \ 
      \      
                    ##        .            
              ## ## ##       ==            
           ## ## ## ##      ===            
       /""""""""""""""""___/ ===        
  ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~    
       \______ o          __/            
        \    \        __/              
          \____\______/ 
 
创建image

 
通过创建"talks on its own"这样一个新的版本,来提升改进whalesay image。
 
步骤一:编写Dockerfile
Dockerfile 是在创建image时,描述 文件,环境,命令的。
 
1.创建新目录:用与创建image所需的所有文件
 
创建目录并进入目录
$ mkdir mydockerbuild
 
$ cd mydockerbuild
 
 
2.编写Dockerfile
 
编写并增加内容
$ vim Dockerfile
 
a.指定基础image
增加:
FROM docker/whalesay:latest
FROM这个关键字告诉Docker,你是以哪个image作为基础的。
 
b.安装fortunes程序到image中
RUN apt-get -y update && apt-get install -y fortunes
fortunes程序会打印一些聪明的话语来自whale。
 
c.增加CMD行
CMD /usr/games/fortune -a | cowsay
CMD 行告诉image在环境安装好后最后运行的命令。
这里是fortune -a 发送它的输出到 cowsay.
 
3.保存,并检查Dockerfile是这样子的
FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay
 
 
步骤二: 从Dockerfile创建image
使用docker build 创建image。
-t 参数给image一个标签,在之后更容易的运行它。
不要忘记 . 命令,它告诉docker build 在本目录寻找调用Dockerfile。
 
zane@zane-V:~/mydockerbuild$ docker build -t docker-whale .
步骤三:学习创建image的过程
docker build -t docker-whale . 命令从Dockerfile一步步读取说明,然后再本地机器中创建docker-whale这个image。
创建过程中输出信息的说明: 
1.Docker 检查并确认创建所需的所有东西都已经有了,会产生以下信息:
Sending build context to Docker daemon 2.048 kB
 
2.Docker 检查并且确定 whalesay image 是否在本地已经存在,如果不存在则从Docker hub 上拉下来。
   在Dockerfile中对应的行,以及产生的信息:
Step 1 : FROM docker/whalesay:latest
---> 6b362a9f73eb
在每一步的最后,ID会被打印出来。这是此步骤创建的ID图层。在Dockerfile的每一行在image中对应图层,你的ID是不一样的。
 
3.Docker启动零时容器运行whalesay image。在这个零时容器中,Docker运行Dockerfile文件中下一个命令,RUN。
   当RUN命令结束,一个新层被创建,零时容器被删除。
 
zane@zane-V:~/mydockerbuild$ docker build -t docker-whale . 
Sending build context to Docker daemon 14.85 kB 
Step 1 : FROM docker/whalesay:latest 
 ---> 6b362a9f73eb 
Step 2 : RUN apt-get -y update && apt-get install -y fortunes 
 ---> Running in e9dbb3ff0ba2 
Ign http://archive.ubuntu.com trusty InRelease 
Get:1 http://archive.ubuntu.com trusty-updates InRelease [65.9 kB] 
....... 
....... 
....... 
Setting up fortunes-min (1:1.99.1-7) ... 
Setting up fortunes (1:1.99.1-7) ... 
Processing triggers for libc-bin (2.19-0ubuntu6.6) ... 
 ---> 4c9a56721bad 
Removing intermediate container e9dbb3ff0ba2
4.创建一个新中间容器,为CMD行增加另一个层。然后删除中间容器
Step 3 : CMD /usr/games/fortune -a | cowsay 
 ---> Running in b1aa7efec08e 
 ---> d09756981eeb 
Removing intermediate container b1aa7efec08e 
Successfully built d09756981eeb 
现在已经创建了一个叫做docker-whale的image。
步骤四: 运行你的docker-whale
 
1.查看image是否已经建立
zane@zane-V:~/mydockerbuild$ docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 
docker-whale        latest              d09756981eeb        19 minutes ago      275.1 MB 
hello-world         latest              c54a2cc56cbb        5 months ago        1.848 kB 
docker/whalesay     latest              6b362a9f73eb        19 months ago       247 MB 
 
2.运行
zane@zane-V:~/mydockerbuild$ docker run docker-whale 
 ____________________________________ 
/ This is National Non-Dairy Creamer \ 
\ Week.                              / 
 ------------------------------------ 
    \ 
     \ 
      \      
                    ##        .            
              ## ## ##       ==            
           ## ## ## ##      ===            
       /""""""""""""""""___/ ===        
  ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~    
       \______ o          __/            
        \    \        __/              
          \____\______/ 
  
zane@zane-V:~/mydockerbuild$ docker run docker-whale 
 _______________________________________ 
/ People who take cold baths never have \ 
\ rheumatism, but they have cold baths. / 
 --------------------------------------- 
    \ 
     \ 
      \      
                    ##        .            
              ## ## ##       ==            
           ## ## ## ##      ===            
       /""""""""""""""""___/ ===        
  ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~    
       \______ o          __/            
        \    \        __/              
          \____\______/ 
 
看上去,whale可以根据自己的想法说点什么了。
 
创建Docker Hub 账号和存储库

 
 
2.在页面中选择 Create Repository
 
步骤一:  选择本地image,并推送到刚刚建立的 Repository
a.查看本地image并选择id号
zane@zane-V:~/mydockerbuild$ docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 
docker-whale        latest              d09756981eeb        32 minutes ago      275.1 MB 
hello-world         latest              c54a2cc56cbb        5 months ago        1.848 kB 
docker/whalesay     latest              6b362a9f73eb        19 months ago       247 MB
b.使用IMAGE ID 和 docker tag 命令,标记你自己的docker-whale image.
zane@zane-V:~/mydockerbuild$ docker tag d09756981eeb zane0306/docker-whale:latest
c.查看你刚刚标记过的image
zane@zane-V:~/mydockerbuild$ docker images 
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE 
docker-whale            latest              d09756981eeb        37 minutes ago      275.1 MB 
zane0306/docker-whale   latest              d09756981eeb        37 minutes ago      275.1 MB 
hello-world             latest              c54a2cc56cbb        5 months ago        1.848 kB 
docker/whalesay         latest              6b362a9f73eb        19 months ago       247 MB
d.命令行登录Dcoker Hub。
zane@zane-V:~/mydockerbuild$ docker login 
Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. 
Username: zane0306 
Password: 
Login Succeeded 
  
e.docker push 命令推送自己image到存储库 
zane@zane-V:~/mydockerbuild$ docker push zane0306/docker-whale 
The push refers to a repository [docker.io/zane0306/docker-whale] 
9748ff4991ff: Pushed 
5f70bf18a086: Mounted from docker/whalesay 
d061ee1340ec: Mounted from docker/whalesay 
d511ed9e12e1: Mounted from docker/whalesay 
091abc5148e4: Mounted from docker/whalesay 
b26122d57afa: Mounted from docker/whalesay 
37ee47034d9b: Mounted from docker/whalesay 
528c8710fd95: Mounted from docker/whalesay 
1154ba695078: Mounted from docker/whalesay 
latest: digest: sha256:62b528c43afd3a2771a167a21ce005a5ee49514109d2af870336f6880ec4eca7 size: 2614
步骤二:  从远程库中拉下image
 
a.从本地删除原有的image
zane@zane-V:~/mydockerbuild$ docker images; 
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE 
docker-whale            latest              d09756981eeb        49 minutes ago      275.1 MB 
zane0306/docker-whale   latest              d09756981eeb        49 minutes ago      275.1 MB 
hello-world             latest              c54a2cc56cbb        5 months ago        1.848 kB 
docker/whalesay         latest              6b362a9f73eb        19 months ago       247 MB 
  
zane@zane-V:~/mydockerbuild$ docker rmi -f d09756981eeb 
Untagged: docker-whale:latest 
Untagged: zane0306/docker-whale:latest 
Untagged: zane0306/docker-whale@sha256:62b528c43afd3a2771a167a21ce005a5ee49514109d2af870336f6880ec4eca7 
Deleted: sha256:d09756981eebc2a3fa7d200e57be74e89147465969aa92dcbd34b3f541a90219 
Deleted: sha256:4c9a56721bad2895ec49a1683737d132f13f2ca99627c5ae3b4368f1b2583919 
  
zane@zane-V:~/mydockerbuild$ docker images; 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE 
hello-world         latest              c54a2cc56cbb        5 months ago        1.848 kB 
docker/whalesay     latest              6b362a9f73eb        19 months ago       247 MB
b.从远程拉取,并加载image
 
zane@zane-V:~/mydockerbuild$ docker run zane0306/docker-whale 
Unable to find image 'zane0306/docker-whale:latest' locally 
latest: Pulling from zane0306/docker-whale 
  
e190868d63f8: Already exists 
909cd34c6fd7: Already exists 
0b9bfabab7c1: Already exists 
a3ed95caeb02: Already exists 
00bf65475aba: Already exists 
c57b6bcc83e3: Already exists 
8978f6879e2f: Already exists 
8eed3712d2cf: Already exists 
c7b22951dde1: Already exists 
Digest: sha256:62b528c43afd3a2771a167a21ce005a5ee49514109d2af870336f6880ec4eca7 
Status: Downloaded newer image for zane0306/docker-whale:latest 
 _________________________________________ 
/ As usual, this being a 1.3.x release, I \ 
| haven't even compiled this kernel yet.  | 
| So if it works, you should be doubly    | 
| impressed. (Linus Torvalds, announcing  | 
| kernel 1.3.3 on the linux-kernel        | 
\ mailing list.)                          / 
 ----------------------------------------- 
    \ 
     \ 
      \      
                    ##        .            
              ## ## ##       ==            
           ## ## ## ##      ===            
       /""""""""""""""""___/ ===        
  ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~    
       \______ o          __/            
        \    \        __/              
          \____\______/   

zane@zane-V:~/mydockerbuild$ docker run zane0306/docker-whale
 _______________________________________
/ Klingon function calls do not have    \
| 'parameters' -- they have 'arguments' |
|                                       |
\ -- and they ALWAYS WIN THEM.          /
 ---------------------------------------
    \
     \
      \     
                    ##        .           
              ## ## ##       ==           
           ## ## ## ##      ===           
       /""""""""""""""""___/ ===       
  ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~   
       \______ o          __/           
        \    \        __/             
          \____\______/  
 
 
总结

    1. Docker Hub 与本地image的push,pull
      • 在Docker Hub上寻找自己感兴趣的image
    2. image 和 contaniers
      • image
        • image 是一个文件系统+参数集合。
        • 没有状态也不可以改变
      • contaniers
        • 一个正在运行的image实例
    3. 利用Dockerfile 创建自己的image
      • 编写Dockerfile
        • a.指定基础image
          • FROM docker/whalesay:latest
        • b.安装fortunes程序到image中
          • RUN apt-get -y update && apt-get install -y fortunes
        • c.增加CMD行
          • CMD /usr/games/fortune -a | cowsay
      • build image
        • zane@zane-V:~/mydockerbuild$ docker build -t docker-whale .
        • -t 参数给image一个标签,在之后更容易的运行它。

发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Docker示例知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。