docker容器入门,安装docker,认识与使用镜像(一)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/ck784101777/article/details/102496159

一、Docker容器介绍

1.什么是容器

    Docker 容器是一个开源的应用容器引擎,让开发者可以以统一的方式打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何安装了docker引擎的服务器上(包括流行的Linux机器、windows机器),也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架包括系统。

 启动一个容器可以像启动一个进程一样快速

2.docker容器的内核技术

此三种技术构建起了docker容器

Cgroups-资源管理   [https://www.cnblogs.com/menkeyi/p/10941843.html

NameSpace-进程隔离 [https://www.cnblogs.com/sparkdev/p/9365405.html]

SELinux-安全  [https://blog.csdn.net/yanjun821126/article/details/80828908]

3.什么是docker

Docker是完整的一套容器管理系统

Docker提供了一组命令,让用户更加方便的使用容器技术,而不需要过多关系底层的内核技术

4.Docker的优点

-相比于传统的虚拟化技术,容器单位更小,创建起来更迅速

-传统虚拟机需要给每个虚拟机安装操作系统

-容器使用共享的库与程序

虚拟化技术要三层支持,OS(操作系统)->库支持(Libs)->应用层(App)

而Docker容器只需要两层,省略操作系统,库支持(Libs)->应用层(App)

5.Docker的不足

-容器的隔离性没有虚拟化强

-共用Linux内核,安全性有先天缺陷

-SELinux难以驾驭

-监控容器和容器排错是挑战

二、安装docker

环境:CentOS7.2

准备一台虚拟机和一台真机,在真机上配置yum源,安装ftp软件,将镜像挂载到ftp上,然后在虚拟机上修改yum配置文件

1.配置yum仓库-真机上操作

docker除了CentOS镜像支持的软件包外,还需要一个RHEL7-extras.iso镜像支持

[RHEL7-extras.iso下载地址]https://github.com/ck784101777/DockerSupport

下载到本地 yum -y install git | git clone https://github.com/ck784101777/DockerSupport/RHEL7-extras.iso

本例需要两个镜像,前者请去官网下载,后者下载我github里的:

CentOS7.iso  

RHEL7-extras.iso

[root@realhost ~]#systemctl enable vsftpd #开机自启ftp服务

[root@realhost ~]#systemctl start vsftpd #启动fpt

[root@realhost ~]#yum install vsftpd -y #安装vsftpd软件,没有yum配置的话,可以使用rpm安装

[root@realhost ~]#cd /var/ftp[root@realhost ~]#cd /var/ftp

[root@realhost ~]#mkdir /local            //创建两个目录

[root@realhost ~]#mkdir /extra

[root@realhost ~]#mount CentOS7.iso /var/ftp/local       //挂载到ftp下

[root@realhost ~]#mount RHEL7-extras.iso /var/ftp/extra

2.配置yum源-虚拟机

[root@virturalhost ~]#vim /etc/yum.repos.d/local.repo

[local_repo]
name=CentOS-$releasever - Base
baseurl="ftp://192.168.1.254/local"  #ip/相对路径
enabled=1
gpgcheck=0

[local_extras]
name=CentOS-$releasever - Extras
baseurl="ftp://192.168.1.254/extras/"
enabled=1
gpgcheck=0
 

3.安装Docker-虚拟机

  1. [root@docker1 ~]# yum -y install docker
  2. [root@docker1 ~]# systemctl restart docker
  3. [root@docker1 ~]# systemctl enable docker
  4. [root@docker1 ~]# ifconfig     //有docker0说明环境部署完成
  5. docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
  6. inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
  7. ether 02:42:3e:e7:3f:6e txqueuelen 0 (Ethernet)
  8. RX packets 0 bytes 0 (0.0 B)
  9. RX errors 0 dropped 0 overruns 0 frame 0
  10. TX packets 0 bytes 0 (0.0 B)
  11. TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
  12. [root@docker1 ~]# docker version        //查看版本
  13. Client:
     Version:         1.12.6
     API version:     1.24
    ........

三、Docker镜像

1.什么是镜像

docker官方镜像仓库:http://hub.docker.com

-Docker容器是基于镜像启动的

-镜像是启动容器的核心

-镜像采用分层设计

-使用COW技术(写时复制),分为前后端盘,确保底层数据不丢失

如图,镜像是不可修改的,我们根据镜像创造容器

2.镜像的命令

-docker images 查看镜像列表

-docker history 查看镜像制作历史

-docker inspect 查看镜像底层信息

-docker pull 下载镜像

-docker push 上传镜像

-docker rmi 删除本地镜像

-docker save 镜像另存为tar包

-docker load 使用tar包导入镜像

-docker search 搜索镜像

-docker tag 修改镜像名称和标签

更多的命令可以通过man docker查看,或者通过man docker-ran 查看某个命令的详细信息

3.镜像的操作

1)搜索镜像

如果你想要获得一个镜像的信息,你可以先搜索这个镜像,比如你想获得一个nginx的镜像,你就搜索nginx,或者你想获得一些其他的像ssh,httpd,ftp都可以搜索的到

命令:docker search 镜像名

注意,加了[OK]的代表是官方的,安全可靠,没有加的需要考量一下安全性

[root@docker1 ~]# docker search nginx
INDEX       NAME                                        DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
docker.io   docker.io/nginx                             Official build of Nginx.                        12045     [OK]       
docker.io   docker.io/jwilder/nginx-proxy               Automated Nginx reverse proxy for docker c...   1671                 [OK]
docker.io   docker.io/richarvey/nginx-php-fpm           Container running Nginx + PHP-FPM capable ...   742                  [OK]
docker.io   docker.io/linuxserver/nginx                 An Nginx container, brought to you by Linu...   79                   
docker.io   docker.io/bitnami/nginx                     Bitnami nginx Docker Image                      71 

2)下载镜像 

搜索之后你肯定要下载

命令:docker push 镜像名

[root@docker2 ~]# docker pull docker.io/nginx
Using default tag: latest
Trying to pull repository docker.io/library/nginx ... 
latest: Pulling from docker.io/library/nginx
b8f262c62ec6: Downloading 5.598 MB/27.09 MB
e9218e8f93b1: Downloading 5.111 MB/23.57 MB
7acba7289aa3: Download complete 

3)查看镜像

可以查看当前安装的镜像

命令:docker images

从左到右的列依次为:仓库 标签 镜像ID 创建时间 大小

[root@docker1 ~]# docker images
REPOSITORY                            TAG                 IMAGE ID            CREATED             SIZE
docker.io/nginx                       latest              42b4762643dc        8 months ago        109.2 MB
 

4)导出镜像

命令:docker save 镜像名:标签 -o 导出文件名

[root@docker1 ~]# docker save docker.io/nginx:latest -o nginx.tar

[root@docker1 ~]# ls

nginx.tar

5)导入镜像

命令:docker load -i 文件名

[root@docker2 ~]# ls

nginx.tar

[root@docker2 ~]# docker load -i nginx.tar

3c816b4ead84: Loading layer 58.47 MB/58.47 MB

787822cf1b17: Loading layer 54.44 MB/54.44 MB

89decbdf7fb7: Loading layer 3.584 kB/3.584 kB

Loaded image: docker.io/nginx:latest/3.584 kB

[root@docker2 ~]# docker images          //查看是否导入成功

REPOSITORY TAG IMAGE ID CREATED SIZE

docker.io/nginx latest 42b4762643dc 4 weeks ago 109.2 M e1ddd7948a1c 4 weeks ago 1.163 MB

6)删除镜像

命令:docker rmi 镜像名:标签/镜像ID

如果你的nginx不唯一,最好使用镜像id删除

  1. [root@docker1 docker]# docker rmi docker.io/nginx
  2. Untagged: docker.io/nginx:latest
  3. Deleted: sha256:42b4762643dcc9bf492b08064b55fef64942f055f0da91289a8abf93c6d6b43c
  4. Deleted: sha256:e0e55dd2303b3e3ec852acae267d1f8a3eea27a22c64a5829304ecee4d3f559c
  5. Deleted: sha256:4062cf272cdd99e83b1c21f712e5e1359c91ecf92925e56c62133c3324b84e45
  6. Deleted: sha256:3c816b4ead84066ec2cadec2b943993aaacc3fe35fcd77ada3d09dc4f3937313

7)启动容器

你可以选择直接允许脚本或者放在后台执行

命令:

直接运行:docker run -it 镜像名:标签  执行脚本(非必须)

后台运行:docker runt itd 镜像名:标签 执行脚本(非必须)

  1. [root@docker1 docker_images]# docker run -it docker.io/centos /bin/bash
  2. [root@7a652fc72a9f /]# ls /
  3. anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var

8)查看后台容器-需后台运行

命令:docker ps

  1. [root@docker1 docker]# docker ps    
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 81458156f6e8 docker.io/nginx "nginx -g 'daemon off" 9 seconds ago Up 8 seconds 80/tcp pedantic_goldberg

9)运行后台镜像

运行后台镜像,run+镜像前3位即可

  1. [root@docker1 docker]# docker run it 814
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 81458156f6e8 docker.io/nginx "nginx -g 'daemon off" 9 seconds ago Up 8 seconds 80/tcp pedantic_goldberg

10 )停止后台容器

命令:docker stop id号

  1. [root@docker1 docker]# docker stop 814
  2. 814

11)修改tag标签

命令:docker tag 原名:原标签 修改后名:新标签

  1. [root@docker1 docker_images]# docker tag docker.io/centos:latest docker.io/cen:v1
  2. [root@docker2 ~]# docker images
  3. REPOSITORY TAG IMAGE ID CREATED SIZE
  4. docker.io/centos latest 42b4762643dc 4 weeks ago 109.2 MB
  5. docker.io/cen v1 42b4762643dc 4 weeks ago 109.2 MB

12)查看容器的底层信息

这个功能很强大,可以查看到镜像的很多信息

 [root@docker1 docker_images]# docker inspect docker.io/centos

13)连接容器attach|exec

我们可以用docker ps 查看后台运行的进程(容器),前面讲过如何启动,docker run -it 镜像id,而这条命令其实是使用的attach连接的容器(默认连接方式),这样连接你退出来就直接关闭容器了,但是很多情况我们希望退出容器后不关闭容器,那么我们就要使用exec去连接

-attach 进入容器,exit会关闭容器

-exec 进入容器,exit不会关闭容器,仍然放到后台

命令格式: docker attach/exec -it 容器id /bin/bash

那是不是说我用attach进入容器后退出就没有方法保留容器了?

我们可以输入ctrl+p+q退出(按住ctrl,按一下p,再按一下q,不是连按),这样退出会保留容器

  1. [root@docker1 docker]# docker attach 0f
  2. [root@docker1 docker]# docker ps //容器关闭
  3. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  4. [root@docker1 docker]# docker exec -it 0f /bin/bash
  5. [root@docker1 docker]# docker ps        //容器不会关闭
  6. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  7. 0b3c50284a1c docker.io/centos "/bin/bash" 15 minutes ago Up 15 minutes tiny_lamarr

猜你喜欢

转载自blog.csdn.net/ck784101777/article/details/102496159