2.3 docker镜像管理
2.3.1 search镜像
[root@docker ~]# docker search centos:6
2.3.2 push镜像
[root@docker ~]# docker pull centos:6
2.3.3 查看镜像
[root@docker ~]# docker images
2.3.4 导入/导出镜像
[root@docker ~]# docker save centos:6 >/opt/centos.tar.gz ==》导出镜像
[root@docker ~]# docker load </opt/centos.tar.gz ==》导入镜像
2.3.4 .1 docker导入新的镜像后repository和tag名称都为none的解决方法
可以使用命令: docker tag [image id] [name]:[版本]
例如: docker tag b03b74b01d97 docker-redis:0.0.1
2.3.5 删除镜像
[root@docker ~]# docker rmi $ IMAGE ID/$TAG
2.3.6 利用镜像创建容器
[root@docker ~]# docker run -it centos:6 /bin/bash
2.4 容器管理
2.4.1 新建容器
[root@docker ~]# docker run centos:6 /bin/echo "hehe" =》与在本地执行/bin/echo "hehe"一样
[root@docker ~]# docker run --name mydocker -it centos:6 /bin/bash =》启动一个bash终端,允许用户进行交互
--name:给容器定义名称
-i:让容器的标准输入保持打开
-t:Docker分配一个伪终端并绑定到容器的标准输入上
2.4.2 启动/停止容器
[root@docker ~]# docker start $NAMES/$CONTAINER ID
[root@docker ~]# docker stop $NAMES/$CONTAINER ID
[root@docker ~]# docker ps ==》列出已经启动的容器
[root@docker ~]# docker ps –a ==》列出所有容器,包括未启动的
2.4.3 删除容器
[root@docker ~]# docker rm $CONTAINER ID ==》删除已经停止的容器
[root@docker ~]# docker rm -f $CONTAINER ID ==》删除正在运行的容器
[root@docker ~]# docker kill $CONTAINER ID ==》删除正在运行的容器
[root@docker ~]# docker kill $(docker ps -a -q) ==》删除历史运行的容器(会将当前的也进行kill)
2.4.4 进入容器
2.4.4.1 attach命令进入
[root@docker ~]# docker attach $CONTAINER ID
注意:该命令是系统自带的,并且启用attach命令有时候并不是特别的方便,当多个窗口同时attach到一个容器的时候,多有的窗口都会同步显示,当某个窗口因某个命令堵塞时,其他窗口也就无法再执行命令了,在退出容器时,该容器会自动停止
2.4.4.2 nsenter命令进入容器(该命令需要安装)
[root@docker ~]# yum install -y util-linux ==》安装nsenter
[root@docker ~]# docker inspect --format "{{.State.Pid}}" test ==》找到容器进程ID
[root@docker ~]# nsenter -t 19245 -u -i -m –p ==》进入容器
-t, --target <pid> target process to get namespaces from
指定容器的进程ID
-m, --mount[=<file>] enter mount namespace
进入到mount namespace空间中
-u, --uts[=<file>] enter UTS namespace (hostname etc)
进入到UTS namespace空间中
-i, --ipc[=<file>] enter System V IPC namespace
进入到System V IPC namespace空间中
-n, --net[=<file>] enter network namespace
进入到network namespace空间中
-p, --pid[=<file>] enter pid namespace
进入到pid namespace空间
2.4.4.3 编写脚本快速进入容器
[root@docker scripts]# vim docker_in.sh
#/bin/bash
PID=$(docker inspect -f "{{.State.Pid}}" $1)
nsenter -t $PID -m -u -i -n -p
2.4.4.4 使用docker exec进入Docker容器
- $ sudo docker exec --help
接下来我们使用该命令进入一个已经在运行的容器
- $ sudo docker ps
- $ sudo docker exec -it 775c7c9ee1e1 /bin/bash
2.4.4.5 提交修改后的仓库
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明:
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。
2.4.4.6 查看容器进程信息
docker top <container-id>|<contianer-name>
示例结果
yili@yili-mbp:~$ docker top 329a8e40a3b0
UID PID PPID C STIME TTY TIME CMD
999 32153 32106 0 Aug06
2.4.4.7 查看容器性能信息
1、命令查看资源信息
docker stats OPTIONS <container-id>|<contianer-name>
OPTIONS 默认 说明
–all, -a false 显示所有容器(默认显示刚刚运行)
–format 使用Go模板打印图像
–no-stream false 禁用流统计信息,仅拉取第一个结果
2、查看docker资源的文件信息
ls /sys/fs/cgroup/memory/docker/容器id/
示例输出如下
yili@yili-mbp:~$ docker stats -a
CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
eb7647d9b2dd 0.06% 6.672 MB / 4.145 GB 0.16% 19.51 MB / 29.
2.4.4.8 docker hub共有镜像发布
1、注册docker hub仓库帐号密码(https://hub.docker.com/)
2、注册docker id后,在linux中登录dockerhub
docker login
3、tag修改镜像名称并push到docker hub共有镜像仓库
docker tag 镜像名 注册用户名/镜像名
docker push 注册用户名/镜像名
yili@yili-mbp:~$ docker tag tomcat:7 zjhsky/tomcat:7
yili@yili-mbp:~$ docker push zjhsky/tomcat:7
4、访问docker hub 仓库push之后的镜像
上传完成后访问:https://hub.docker.com/r/zjhsky/tomcat
2.4.4.9 docker hub共有镜像发布
1.下载一个docker官方私有仓库镜像
docker pull registry
2.运行一个docker私有容器仓库
docker run -d -p 5000:5000 -v /opt/data/registry:/var/lib/registry registry
-d 后台运行
-p 端口映射 宿主机的5000:容器内的5000
-v 数据卷挂载 宿主机的 /opt/data/registry :/var/lib/registry
registry 镜像名
/var/lib/registry 存放私有仓库位置
# Docker 默认不允许非 HTTPS 方式推送镜像。我们可以通过 Docker 的配置选项来取消这个限制
3.修改docker的配置文件,让他支持http方式,上传私有镜像
vim /etc/docker/daemon.json
# 写入如下内容
{
"registry-mirrors": ["http://f1361db2.m.daocloud.io"],
"insecure-registries":["192.168.11.37:5000"]
}
4.修改docker的服务配置文件
vim /lib/systemd/system/docker.service
找到[service]这一代码区域块,写入如下参数
[Service]
EnvironmentFile=-/etc/docker/daemon.json
5.重新加载docker服务
systemctl daemon-reload
6.重启docker服务
systemctl restart docker
# 注意:重启docker服务,所有的容器都会挂掉
7.修改本地镜像的tag标记,往自己的私有仓库推送
docker tag tomcat:7 47.99.236.192:5000/tomcat:7
docker push 47.99.236.192:5000/tomcat:7
访问curl http://192.168.119.10:5000/v2/_catalog查看推送的仓库
8.下载私有仓库的镜像
docker pull 47.99.236.192:5000/tomcat:7