docker容器入门,安装docker,认识与使用镜像(一)
一、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.****.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
[[email protected] ~]#systemctl enable vsftpd #开机自启ftp服务
[[email protected] ~]#systemctl start vsftpd #启动fpt
[[email protected] ~]#yum install vsftpd -y #安装vsftpd软件,没有yum配置的话,可以使用rpm安装
[[email protected] ~]#cd /var/ftp[[email protected] ~]#cd /var/ftp
[[email protected] ~]#mkdir /local //创建两个目录
[[email protected] ~]#mkdir /extra
[[email protected] ~]#mount CentOS7.iso /var/ftp/local //挂载到ftp下
[[email protected] ~]#mount RHEL7-extras.iso /var/ftp/extra
2.配置yum源-虚拟机
[[email protected] ~]#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-虚拟机
- [[email protected] ~]# yum -y install docker
- [[email protected] ~]# systemctl restart docker
- [[email protected] ~]# systemctl enable docker
- [[email protected] ~]# ifconfig //有docker0说明环境部署完成
- docker0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
- inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
- ether 02:42:3e:e7:3f:6e txqueuelen 0 (Ethernet)
- RX packets 0 bytes 0 (0.0 B)
- RX errors 0 dropped 0 overruns 0 frame 0
- TX packets 0 bytes 0 (0.0 B)
- TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- [[email protected] ~]# docker version //查看版本
- 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 修改镜像名称和标签
3.镜像的操作
1)搜索镜像
如果你想要获得一个镜像的信息,你可以先搜索这个镜像,比如你想获得一个nginx的镜像,你就搜索nginx,或者你想获得一些其他的像ssh,httpd,ftp都可以搜索的到
命令:docker search 镜像名
注意,加了[OK]的代表是官方的,安全可靠,没有加的需要考量一下安全性
[[email protected] ~]# 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 镜像名
[[email protected] ~]# 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 创建时间 大小
[[email protected] ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/nginx latest 42b4762643dc 8 months ago 109.2 MB
4)导出镜像
命令:docker save 镜像名:标签 -o 导出文件名
[[email protected] ~]# docker save docker.io/nginx:latest -o nginx.tar
[[email protected] ~]# ls
nginx.tar
5)导入镜像
命令:docker load -i 文件名
[[email protected] ~]# ls
nginx.tar
[[email protected] ~]# 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
[[email protected] ~]# 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删除
- [[email protected] docker]# docker rmi docker.io/nginx
- Untagged: docker.io/nginx:latest
- Deleted: sha256:42b4762643dcc9bf492b08064b55fef64942f055f0da91289a8abf93c6d6b43c
- Deleted: sha256:e0e55dd2303b3e3ec852acae267d1f8a3eea27a22c64a5829304ecee4d3f559c
- Deleted: sha256:4062cf272cdd99e83b1c21f712e5e1359c91ecf92925e56c62133c3324b84e45
- Deleted: sha256:3c816b4ead84066ec2cadec2b943993aaacc3fe35fcd77ada3d09dc4f3937313
7)启动镜像
你可以选择直接允许脚本或者放在后台执行
命令:
直接运行:docker run -it 镜像名:标签 执行脚本(非必须)
后台运行:docker runt itd 镜像名:标签 执行脚本(非必须)
- [[email protected] docker_images]# docker run -it docker.io/centos /bin/bash
- [[email protected] /]# ls /
- anaconda-post.log bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
8)查看后台镜像-需后台运行
命令:docker ps
- [[email protected] docker]# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 81458156f6e8 docker.io/nginx "nginx -g 'daemon off" 9 seconds ago Up 8 seconds 80/tcp pedantic_goldberg
9)运行后台镜像
运行后台镜像,run+镜像前3位即可
- [[email protected] docker]# docker run it 814
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 81458156f6e8 docker.io/nginx "nginx -g 'daemon off" 9 seconds ago Up 8 seconds 80/tcp pedantic_goldberg
10 )停止后台镜像
命令:docker stop id号
- [[email protected] docker]# docker stop 814
- 814
11)修改tag标签
命令:docker tag 原名:原标签 修改后名:新标签
- [[email protected] docker_images]# docker tag docker.io/centos:latest docker.io/cen:v1
- [[email protected] ~]# docker images
- REPOSITORY TAG IMAGE ID CREATED SIZE
- docker.io/centos latest 42b4762643dc 4 weeks ago 109.2 MB
- docker.io/cen v1 42b4762643dc 4 weeks ago 109.2 MB
12)查看镜像的底层信息
这个功能很强大,可以查看到镜像的很多信息
[[email protected] 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,不是连按),这样退出会保留容器
- [[email protected] docker]# docker attach 0f
- [[email protected] docker]# docker ps //容器关闭
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- [[email protected] docker]# docker exec -it 0f /bin/bash
- [[email protected] docker]# docker ps //容器不会关闭
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 0b3c50284a1c docker.io/centos "/bin/bash" 15 minutes ago Up 15 minutes tiny_lamarr