镜像管理
镜像就是一个只读模板, 里面可以有很多东西。 启动起来后, 就是一个容器了。 仓库就是存放镜像的地方。
阿里云的加速器。 具体步骤查看阿里云官方网站显示。
常用的 docker search XXX , docker pull XXX,
给镜像打标签, docker tag centos tomcat_centos:tomcat 这样可以用多个镜像了。
容器启动
docker ps 显示启动中的容器, docker ps -a 启动所有状态的容器,停止的或者是运行的。
启动容器, docker run -itd xxx -i:表示把容器的标准输出打开 -t:表示分配一个为终端,-d:表示后台启动 xxx:表示镜像。
删除镜像
在使用Docker的时候遇到删不掉image的情况,如下: docker rmi XXX(镜像名称):YYY(镜像tag)
1. 先查询记录 docker ps -a
2. 把该镜像的记录全部删除掉,如果删除所有镜像的记录,可以使用:docker ps -a|awk '{print $1}'|xargs docker rm
3. docker rmi 5e4f2da203e2就可以了
删除tag就是删除这个tag的镜像 , 如果是删除imageId的话,就是这个镜像的id,所有imageId的都可以删除。镜像里面的 tag有不同的, 但是imageId是相同的。
privileged(使用该参数,container内的root拥有真正的root权限)
docker run -itd -p 10001:22 --privileged=true base_centos:latest /usr/sbin/init
刚开始接触Docker的朋友,可能会遇到这么一个问题,使用centos7镜像创建容器后,在里面使用systemctl启动服务报错。针对这个报错,我们接下来就分析下!
# docker run -itd --name centos7 centos:7
# docker attach centos7
# yum install vsftpd
# systemctl start vsftpd
Failed to get D-Bus connection: Operation not permitted
不能启动服务,什么情况?
难道容器不能运行服务嘛!!!
答:
Docker的设计理念是在容器里面不运行后台服务,容器本身就是宿主机上的一个独立的主进程,也可以间接的理解为就是容器里运行服务的应用进程。一个容器的生命周期是围绕这个主进程存在的,所以正确的使用容器方法是将里面的服务运行在前台。
再说到systemd,这个套件已经成为主流Linux发行版(比如CentOS7、Ubuntu14+)默认的服务管理,取代了传统的SystemV风格服务管理。systemd维护系统服务程序,它需要特权去会访问Linux内核。而容器并不是一个完整的操作系统,只有一个文件系统,而且默认启动只是普通用户这样的权限访问Linux内核,也就是没有特权,所以自然就用不了!
因此,请遵守容器设计原则,一个容器里运行一个前台服务!
我就想这样运行,难道解决不了吗?
答:可以,以特权模式运行容器。
创建容器:
# docker run -d -name centos7 --privileged=true centos:7 /usr/sbin/init—开启SSH通路。
进入容器:
# docker exec -it centos7 /bin/bash
这样可以使用systemctl启动服务了。
通过容器创建镜像
使用模板创建镜像
docker容器管理
启动时候,修改名字, 然后进入容器的时候,可以直接用名字进入容器中。 docker exec -it xxxx(容器名字) bash
docker仓库管理(上传到自己的私有仓库)
上传到docker库里面: 上传的时候如果出现denied: requested access to the resource is denied 这个错误, 你需要的是把镜像名字前面改成maizi1989/mz_base_centos7,
其中maizi1989这个是docker hub上面的账户。
REPOSITORY: 是这个名字前面需要加入maizi1989
docker tag 6824c2a39c01 maizi1989/base_nginx 这个可以直接修改。
数据卷
数据管理: 用户在使用 Docker 的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多 个容器之间进行数据的共享,这必然涉及容器的数据管理操作。容器中管理数据主要有两种方式:数据卷(Data Volumes),数据卷容器(Data Volume Containers)。
docker run -itd -p 10001:22 -v /docker_data:/opt/webdata --privileged=true base_centos:latest /usr/sbin/init
其中 /docker_data 表示宿主的目录, /opt/webdata表示容器里面的目录。 这两个目录是一种数据共享目录。
ssh -p 10001 root@10.10.30.232
数据卷容器
相当于, 把一个镜像作为一个容器, 然后其他的容器可以直接挂载这个容器, 然后所有挂载的地方对这个数据源进行同步,任何一方进行了改变,其他地方都是可以用的。数据可以进行备份和还原。
网络映射处理
docker run创建Docker容器时,可以用–net选项指定容器的网络模式,Docker有以下4种网络模式:
bridge模式:使用–net =bridge指定,默认设置;
在宿主机上作为一块虚拟网卡使用 , 默认和宿主机是想通的。
host模式:使用–net =host指定;
容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。
none模式:使用–net =none指定;
需要我们自己为Docker容器添加网卡、配置IP等。
container模式:使用–net =container:NAMEorID指定。
这个模式指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享
dockerFile
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
就相当于,把所有的操作的一些命令直接写在这个文本中, 不用每次去敲写。 这个后期在继续学习这个话题。
docker-compose
这个就相当于shell脚本, 可以一次性启动很多容器
多个容器通信
解决方法 在运行容器的时候如果想连接其他容器 在运行的时候加上 --link +容器名称