Docker三大核心组件:
• Docker 镜像 - Docker images
• Docker 仓库 - Docker registeries
• Docker 容器 - Docker containers
私有库:
docker在国内没有服务器
docker国内仓库:ali、网易蜂巢、daocloud
安装docker
# yum install docker
启动docker
# systemctl start docker.service
# systemctl enable docker.service
确定docker服务在运行
# docker version
查看docker基本信息
# docker info
(只适用于官方源)
# docker search centos -s 100 (查看centos的镜像星大于100的)
# docker pull .... (下载....)
下载sentos7的镜像
# docker pull daocloud.io/centos:7
查看所有的镜像
# docker images
运行容器并进入容器操作
# docker run -it daocloud.io/centos /bin/bash
(-i 捕获标准输入输出 -t 分配一个终端或控制台 -d运行在后台)
创建一个容器但不进入容器
# docker create -it daocloud.io/centos:7 /bin/bash
rm 删除容器
rmi 删除镜像
删除一个或多个,多个之间用空格隔开
# docker rmi daocloud.io/library/mysql
# docker rmi ed9c93747fe1
强制删除:–force
如果镜像正在被使用中可以使用--force强制删除
# docker rmi docker.io/ubuntu:latest --force
删除所有镜像:
# docker rmi $(docker images -q)
只查看所有镜像的id:
# docker images -q
查看容器:
只查看运行状态的容器:
#docker ps
#docker ps -a
-a 查看所有容器
只查看所有容器id:
# docker ps -a -q
删除容器:
# docker rm 容器id或名称
根据格式删除所有容器:
# docker rm $(docker ps -qf status=exited)
运行一个 Docker 容器:
# docker run -it centos /bin/bash
如果执行成功,说明CentOS 容器已经被启动,并且应该已经得到了 bash 提示符。
-i 捕获标准输入输出
-t 分配一个终端或控制台
若要断开与容器的连接,并且关闭容器:
容器内部执行如下命令
[root@d33c4e8c51f8 /]#exit
重新启动docker
# docker start ...
重新进去容器
# docker attach id号
不进入容器在容器中创建一个文件
# docker exec elated_lovelace touch /testfile
如果只想断开和容器的连接而不关闭容器:
快捷键:ctrl+p+q
运行远程机器上的容器:
[root@master ~]# docker run -it
-h test.up.com daocloud.io/centos:7
在其他窗口列出正在运行的容器:
[root@master ~]# docker ps
列出所有的容器(包括正在运行的容器和已经退出的容器):
[root@master ~]# docker ps -a
# docker ps -q 查找已运行的docker容器的ID
# docker ps -a -q 查找所有的docker容器的ID
列出最近一次启动的容器
# docker ps -l
恢复容器内暂停的进程,与pause参数相对应
# unpause Unpause a paused container
查找某一个运行中容器的id,然后使用docker inspect命令查看容器的信息
docker inspect id号
容器卷
# docker run -it -v /abc:/abc 1ae9
宿主机的目录:容器的目录
共享bc4181容器的卷:
# docker run -it --volumes-from bc4181 daocloud.io/library/centos:5 /bin/bash
删除容器
# docker rm trusting_newton
如果要删除一个运行中的容器,可以添加 -f 参数。Docker 会发送 SIGKILL 信号给容器。
杀死所有running状态的容器
# docker kill $(docker ps -q)
查看容器内发生变化的文件
# docker diff 容器名称
实时输出容器的事件
# docker events
创建自己的镜像
1.将容器的文件系统打包成tar文件
第一种:
# docker export -o elated_lovelace.tar elated_lovelace
第二种:
# docker export 容器名称 > 镜像.tar
导入镜像归档文件到其他宿主机
# docker import elated_lovelace.tar elated_lovelace:v1
如果导入镜像时没有起名字,随后可以单独起名字(没有名字和tag),可以手动加tag:
# docker tag 镜像ID mycentos:7
2.将镜像打包
#docker save -o nginx.tar nginx
#docker load < nginx.tar
3.通过容器创建本地镜像
# docker commit -a ll -m ll b1cce61d2c19 ll:11
-a 制作者 -m 描述信息
4.通过docker file创建镜像
创建镜像所在的文件夹和Dockerfile文件
命令:
# mkdir 名字
# cd 名字
# vim Dockerfile
# This is a comment
FROM ubuntu:14.04
MAINTAINER wing [email protected]
RUN apt-get update
RUN gem install Sinatra
格式说明:
每行命令都是以 INSTRUCTION statement 形式,就是命令+ 清单的模式。命令要大写,"#"是注解。
FROM 命令是告诉docker 我们的镜像什么。
MAINTAINER 是描述 镜像的创建人。
RUN 命令是在镜像内部执行。就是说他后面的命令应该是针对镜像可以运行的命令。
# docker build -t wing/名字:v2
部署私有仓库
1.拉取镜像
# docker pull daocloud.io/library/registry:latest
注:如果创建容器不成功,报错防火墙,解决方案如下
#systemctl stop firewalld
#yum install iptables*
#systemctl start iptables
#iptables -F
#systemctl restart docker
2.将宿主机端口映射到容器中去,容器的5000端口是不能更改的
# docker run -d -p 5000:5000 daocloud.io/library/registry
3.进入到私有仓库容器中去
# docker exec -it a9a0dfaea6ad /bin/sh
/ # netstat -lnp
在上传前需要将镜像做个tag ,注明ip和端口 即:
# docker tag daocloud.io/library/mysql:latest 192.168.245.136:5000/daocloud.io/library/mysql:latest
4.在本机查看能否访问该私有仓库,看看状态码是不是200
# curl -I 127.0.0.1:5000
如果报错:
改/etc/sysconfig/docker
OPTIONS='--selinux-enabled --insecure-registry 192.168.137.17:5000'
注:红色IP为修改的部分
5.上传镜像到私有仓库
# docker push 192.168.245.136:5000/daocloud.io/library/mysql
报错:
6.如果上传镜像时发生以下错误:
http: server gave HTTP response to HTTPs client
方法1:
在"/etc/docker/"目录下,创建"daemon.json"文件。在文件中写入:
{ "insecure-registries":["192.168.245.136:5000"] }保存退出后,重启docker。问题解决
方法2:
报错:
[root@localhost~]#docker run -it mytest1 /bin/bash -d WARNING: IPv4 forwarding is disabled. Networking will not work.
解决:
[root@localhost/]#cat /etc/docker/daemon.json
{
"dns":["10.18.47.1","8.8.8.8","10.18.47.100"],
"live-restore": true
}
[root@localhost/]#cat /usr/lib/sysctl.d/99-docker.conf
fs.may_detach_mounts=1
net.ipv4.ip_forward=1
7.查看私有仓库里的所有镜像
# curl 192.168.245.136:5000/v2/_catalog
#vim /etc/sysconfig/docker-network
DOCKER_NETWORK_OPTIONS= --bip=172.18.42.1/16
#reboot
docker 130上:
#route add -net 172.18.0.0/16 gw 192.168.18.128
docker 128上:
#route add -net 172.17.0.0/16 gw 192.168.18.130
现在两台宿主机里的容器就可以通信了