Docker介绍:
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可抑制的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器完全使用沙盒机制,相互之间不会存在任何接口。几乎没有性能开销,可以很容易的在机器和数据中心运行。最重要的是,他们不依赖于任何语言、框架或者包装系统。
Docker是dotCloud公司开源的一个基于LXC的高级容器引擎,源码托管在Github上,基于go语言并且遵从Apache2.0协议开源。
GitHub地址:https://github.com/moby/moby
小知识:LXC为Linux Container的简写。Linux Container 容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。
LXC主要通过Kernel的namespace实现每个用户实例之间的项目隔离,通过cgroup实现对资源的配额和调度。
docker官网:https://www.docker.com
docker中文库:https://www.docker.org.cn/
帮助命令:
docker version #查看docker版本
docker info #查看docker的系统信息,包括镜像和容器的数量
docker 命令 --help #帮助命令
Ubuntu系统命令
更新file: apt-file update 查看自己内核:uname -r(简化显示) \ uname -a(全面显示)
查看自己内存: cat meminfo 查看当前所产生的挂载: cat mounts
查看设备内容编号: cat devices 查看加载的模块:cat modules
查看版本: cat version 查看swap分区有多大:cat swaps
系统正常运行时间:cat uptime 查看当前进程: cat self
docker镜像命令:
docker images 查看镜像
docker images #查看所有本地主机上的镜像
docker images --help #帮助
#可选项
-a #显示所有的镜像
-q #只显示镜像的ID
docker search 搜索镜像
root@server1:~# docker search mysql
NAME DESCRIPTION
STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 12572 [OK]
mariadb MariaDB Server is a high performing open sou… 4831 [OK]
#可选项
--filter=STARS=3000 #搜索STARS大于3000的镜像
docker pull下载镜像
docker pull 镜像名 / docker pull 镜像名:版本号
root@server1:~# docker pull mysql
Using default tag: latest #如果不写tag,默认为latest(最新版)
latest: Pulling from library/mysql
72a69066d2fe: Pull complete #分层下载,docker image的核心 联合文件系统,更新删除旧版本时只删除不需要的分层
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
688ba7d5c01a: Pull complete
00e060b6d11d: Pull complete
1c04857f594f: Pull complete
4d7cfa90e6ea: Pull complete
e0431212d27d: Pull complete
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址
#docker pull mysql = docker pull docker.io/library/mysql:latest
docker删除镜像
docker rmi -f 镜像ID #删除指定镜像
docker rmi -f 镜像ID 镜像ID 镜像ID #删除多个镜像
docker rmi -f $(docker images -aq) #删除所有镜像
容器命令
!!有了镜像才可以创建容器 !!
docker pull centos #下载镜像
新建容器启动
docker run [可选参数]
--name="name" #容器名字 用来区分容器 例:node01 node02 node03
-d #后台方式运行
-it #使用交互方式运行,进入容器查看内容
-p(小写) #指定容器的端口 例:-p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口 (常用)
-P(大写) #随机指定端口
#测试
root@server1:~# docker run -it --name="node01" centos /bin/bash
[root@3d77c80f1450 /]# ls
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin
#create #创建一个新的容器,同run,但不启动容器
docker ps 命令
docker ps 命令 #列出所有正在运行的容器
参数:
-a #列出当前正在运行的容器和历史运行过的容器
-n=? #显示最近创建的容器
-----例:docker ps -n=3 #显示最近创建的3台容器
-q #只显示容器的编号
root@server3:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
root@server3:~# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3ded0c98cea0 centos "/bin/bash" 4 hours ago Exited (0)
About an hour ago node01
退出容器
exit #直接容器停止并退出
ctrl + p + q #容器不停止退出
删除容器
docker rm 容器id #删除指定的容器 不能删除正在运行的容器
docker rm -f $(docker ps -aq) #删除所有容器
docer ps -a -q | xargs docker rm #删除所有的容器
启动和停止容器的操作
docker start 容器id #启动容器
docker restart 容器id #重新启动容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器
常用的其他命令
后台启动容器
命令 docker run -r 镜像名!
docker run -d centos 会出现的问题:
问题1:docker ps ,发现centos停止了
问题2:docker容器使用后台运行,就必须要有一个前台进程docker没有发现应用,就会自动停止,容器启动以后,发现自己没有提供服务就会立刻停止,就是没有程序了
查看日志
docker logs --help #日志帮助命令
-f #显示日志的信息
-t #显示时间戳 -t 和 -f 可以一起使用 例:docker logs -tf 容器id
--tail #以字符串的形式显示日志 需要添加查看的日志条数
docker logs -f -t --tail 10 容器id #显示最近的10条日志
查看容器中的进程id
docker top 容器id
root@server1:~# docker top 3ded0c98cea0
UID PID PPID C
STIME TTY TIME CMD
root 102177 102148 0
06:49 pts/0 00:00:00
/bin/bash
查看容器的元数据
docker inspect 容器id
进入当前正在运行的容器
通常情况下我们都是使用后台方式运行容器,需要进入容器更改一些配置
docker exec -it 容器id /bin/bash #进入容器后打开一个新的终端(常用)
docker attach -it 容器id #进入容器正在执行的终端,不会启动新的终端
从容器内拷贝文件到主机上
#讲容器内/home/test.txt文件拷贝到主机的/home目录下
docker cp 容器id:/home/test.txt /home
docker commit打包镜像
docker commit 将容器打包为一个可供下载的镜像
docker commit -m="提交的信息" -a="作者名称" 容器id 打包后的镜像名称:版本号
##实践例子##
# 作者名称为 kelin 备注信息为 hello kelin 版本号设置为 tomcat:1.0 !都可自己随意设置!
docker commit -a="kelin" -m="hello kelin" e56e24f01283 tomcat001:1.0
#打包完成后docker images查看 效果如下
常用命令小结
attach #当前shell下attach连接指定运行镜像
build #通过dockerfile定制镜像
cp #从容器中拷贝文件或者目录到宿主机·
cerate #创建一个新的容器,同run 但不启动容器
diff #查看docker容器的变化
events #从docker服务获取容器实时事件
exec #在已存在的容器上运行命令
export #导出容器的内容作为一个tar归档文件[对应import]
history #展示历史命令
images #列出系统当前镜像
import #从tar包中的内容创建一个新的文件系统
info #显示系统相关信息
inspect #查看容器详细信息
kill #kill指定docker容器
load #从一个tar包中下载一个镜像[对应save]
login #注册或登陆一个docker源服务器
logout #从当前Docker registory退出
logs #输出当前容器日志
port #查看映射端口对应的容器内部源端口
pause #暂停容器
ps #列出容器列表
pull #从docker镜像源服务器拉取指定镜像
restart #重启运行容器
rm #移除一个或多个容器
rmi #移除一个或多个镜像[无容器使用该镜像的情况下才可移除,否则需要删除相关容器才可继续或-f强制移除]
run #创建新的容器并运行一个命令
save #保存一个镜像为一个tar包[对应load]
search #在docker hub中搜索镜像
start #启动容器
stop #停止容器
tag #给源中镜像打标签
top #查看容器中运行的进程信息
unpause #取消暂停容器
version #查看版本号
wait #截取容器停止时的退出状态值