upload successful

镜像小的原因:
Linux操作系统两个部分构成内核空间(kernel)、用户空间(rootfs)

查看docker的基础信息
1
docker info
查看所有镜像
1
2
3
4
5
docker images 
-a:列出本地所有的镜像(含中间映像层)
-q:只显示镜像id
--digests:显示镜像的摘要信息
--no-trunc:显示完整的镜像信息
下载镜像
1
2
3
4
docker pull 镜像名   
// 如果只指定镜像的名称默认下载最新版本,可以指定镜像名称以及版本号
例:centos:7
下载的是centos 7版本
删除镜像
1
2
3
docker rmi 镜像名 	// 删除镜像,默认删除 镜像名:latest,这个镜像不能在运行中
docker rmi -f 镜像名 // 强制删除
docker rmi -f $(docker images -qa) // 删除全部镜像
导出镜像
1
2
3
4
5
docker save -o {导出的包名称} {镜像名称及标签}

例:将镜像导出当前目录下
docker save -o centos.tar centos:latest
将镜像centos:latest另存到虚拟机当前目录下,命名为centos.tar
导入镜像
1
docker load < {包名称}
重命名镜像名及标签名
1
docker tag {源镜像名称:标签} {新镜像名称:标签}
创建不运行的容器
1
docker create --name {test容器名} {httpd镜像名}
创建并运行容器
1
2
3
4
5
6
7
8
9
10
11
12
docker run -itd -p 88:80--name test --restart always centos:7 /bin/bash

参数:
-i 以交互方式登录
-t 允许以交互方式打开终端
-d 在后台运行
-p 映射端口,将容器中的80端口映射成物理机中的88端口
--name 添加容器名
--restart always 跟随docker启动而启动,就是当服务重启时、启动时,该容器也会运行
--rm 容器一旦停止就会被自动删除,不添加的话容器会永久保存在计算机中
--privileged 添加特权,不添加此参数 运行一些系统命令时错
(会提示permission denied)
查看所有容器

包括UP以及DOWN

1
docker ps -a
容器的启停重启操作
1
2
3
4
5
6
docker {parameter} {容器ID或name}

parameter:
start:启动
stop:停止
restart:重启
进入容器
1
docker exec -it {容器ID或name} bash
挂起容器
1
docker pause {容器ID或name}
取消挂起
1
docker unpause {容器ID或name}
删除容器
1
docker rm {容器ID或name}
重命名容器名称
1
docker rename {旧容器name} {新容器name}
查看容器信息
1
docker inspect {容器ID或name}
在docker hub中查看关于该镜像的所有镜像
1
2
3
docker search 镜像名
-s 点赞数(例:-s 30 tomcat 筛选出点赞数大于30的)
--automated:只列出automated build类型的镜像
容器中安装命令
1
2
3
4
5
6
7
yum provides 命令

例:
yum provides wget // 搜查wget命令属于哪个软件包
wget-1.14-13.el7.x86_64 : A utility for retrieving files using the HTTP or FTP protocols
源 :@anaconda
yum -y install wget-1.14-13.el7.x86_64 // 安装wget对应的软件包
如果容器无法使用网络

开启路由转发

1
2
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
嵌套旧容器运行新容器

当我们容器中命令不可用时可以选择安装命令,在无法安装命令时,可以采用嵌套容器的形式来运行指令

1
2
3
4
5
6
docker run -it --rm --network container:{旧容器name} {busybox新容器使用的镜像}

参数:
–rm:容器停止后自动删除
–network container:用于连接某台容器,使得两台容器使用同一个网络,也就是使用同一个IP;

实现一个容器连接多个网卡的命令
1
2
3
4
5
docker network connect {网卡名称} {连接到哪个容器的名称}

例:docker network connect my_net nginx

作用:可以实现不同网络间通信
编写进入容器脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
vim /usr/bin/docker-enter
!/bin/sh
if [ -e $(dirname "$0")/nsenter ]; then
with boot2docker, nsenter is not in the PATH but it is in the same folder
NSENTER=$(dirname "$0")/nsenter
else
NSENTER=nsenter
fi
if [ -z "$1" ]; then
echo "Usage: `basename "$0"` CONTAINER [COMMAND [ARG]...]"
echo ""
echo "Enters the Docker CONTAINER and executes the specified COMMAND."
echo "If COMMAND is not specified, runs an interactive shell in CONTAINER."
else
PID=$(docker inspect --format "{{.State.Pid}}" "$1")
if [ -z "$PID" ]; then
exit 1
fi
shift
OPTS="--target $PID --mount --uts --ipc --net --pid --"
if [ -z "$1" ]; then
# No command given.
# Use su to clear all host environment variables except for TERM,
# initialize the environment variables HOME, SHELL, USER, LOGNAME, PATH,
# and start a login shell.
"$NSENTER" $OPTS su - root
else
# Use env to clear all host environment variables.
"$NSENTER" $OPTS env --ignore-environment -- "$@"
fi
fi

给予权限

1
chmod +x /usr/bin/docker-enter

可以使用该脚本,加容器name或者容器id来启动容器

1
docker-enter 容器id