Docker简介
Docker的英文意思是 码头工人,一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不得不面对的问题,特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验
Docker之所以发展如此迅速,也是因为它对此给出了一个标准化的解决方案。
环境配置如此麻烦,换一台机器,就要重来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。简言之,就是可以在Linux上镜像使用的这么一个容器。
Docker理念
一次封装,到处运行
解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。
Docker的基本组成
1、镜像
Docker 镜像(Image) 就是一个只读的模板。镜像可以用来创建 Docker容器,一个镜像可以创建很多容器。
2、容器
Docker 利用容器(Container) 独立运行的一个或一组应用。容器是用来创建运行实例,可以把容器看做是一个简易般的 Linux 环境。
3、仓库
仓库(Repository) 是集中存放镜像文件的场所,最大的公开仓库是Docker Hub。
Docker和VM对比
Docker利用的是宿主机的内核,而不需要CentOS,因此,当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载CentosOS,返个新建过程是分钟级别的。而Docker由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个Docker容器只需要几秒钟。
Docker相关地址
1、Docker官网:传送
2、Docker仓库:传送
3、阿里云容器镜像服务:传送
Docker安装
查看自己系统相关信息
# 查看系统的内核
[root@iZ2zej1alu07023nc5lzsoZ ~]# uname -r
3.10.0-1062.1.2.el7.x86_64
# 查看系统版本
[root@iZ2zej1alu07023nc5lzsoZ ~]# uname -r
3.10.0-1062.1.2.el7.x86_64
安装
帮助文档:传送
开始安装Docker
# 1、卸载Docker
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
# 2、安装所需要的包
yum install -y yum-utils
# 3、设置镜像仓库
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo # 默认是国外的
# 阿里云镜像(这里使用阿里云的)
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新yum软件包索引
yum makecache fast
# 4、安装docker docker-ce(社区版) ee(企业版)
yum install docker-ce docker-ce-cli containerd.io
# 5、启动docker
systemctl start docker
# 6、查看是否启动成功
systemctl status docker
# 7、验证Docker是否正确被安装
docker run hello-world
# 8、查看镜像
docker images
配置镜像加速
cd /etc/docker
vi /etc/docker/daemon.json
打开阿里云镜像服务,复制下面红色标注的地
方。
配置并使用
# 第一步
sudo mkdir -p /etc/docker
# 第二步
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["自己的镜像地址"]
}
EOF
# 第三步
sudo systemctl daemon-reload
# 第四步
sudo systemctl restart docker
Docker常用命令
Docker命令文档地址:传送
帮助命令
docker version # 显示docker的版本信息
docker info # 显示docker系统信息包含镜像和容器
docker 命令 --help # 帮助信息
镜像命令
docker images # 查看所有本地主机的镜像
[root@iZ2zej1alu07023nc5lzsoZ docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 4 months ago 13.3kB
# 解释
REPOSITORY:仓库源
TAG:镜像的标签
IMAGE ID:镜像的ID
CREATED:镜像的创建时间
SIZE:镜像的大小
# 可选项
-a, --all 列出所有镜像
-q, --quiet 只显示镜像的id
1、搜索镜像
[root@iZ2zej1alu07023nc5lzsoZ docker]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 9535 [OK]
# 可选项
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print search using a Go template
--limit int Max number of search results (default 25)
--filter=STARS=3000 #搜索镜像下载量大于3000的
2、下载镜像
docker pull 镜像名[:tag]
如:docker pull mysql:5.7
3、删除镜像
docker rmi -f # 删除所有
docker rmi -f 镜像id 镜像id 镜像id # 删除指定镜像
docker rmi -f $(docker images -aq) # 删除全部容器
容器命令
1、运行容器
docker run [可选参数] image
# 参数
-name="名字" 容器名字
-d 以后台方式运行
-it 使用交互方式进入容器
-p 指定容器的端口
-p ip:主机端口:容器端口
-p 主机端口:容器端口 (常用的)
-p 容器端口
-P 随机指定端口
# 启动并进入容器
[root@iZ2zej1alu07023nc5lzsoZ docker]# docker run -it centos /bin/bash
[root@b6b951d37c1d /]#
# 从容器退回主机
[root@b6b951d37c1d /]# exit
2、列出所有运行中的容器
docker ps # 列出当前正在运行的容器
-a # 列出当前正在运行的容器 + 历史运行过的容器
-n=? # 显示最近创建的容器
-q # 只显示容器的id
3、删除容器
exit # 直接停止并退出
Ctrl+P+Q # 容器不停止退出
docker attach 容器id # 进入运行中的容器
docker exec -it 容器id /bin/bash # 进入运行中的容器
attach和exec有什么区别:
使用exec进入容器,退出使用exit不会把容器给停止掉,而attach则需要使用快捷键进行退出。
4、启动和停止容器
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止容器
docker kill 容器id # 强制停止容器
5、以后台的方式启动容器
docker run -d 镜像名
# 使用以上命令启动centos,发现centos停止了,因为容器启动必须有一个前台进程。
6、查看容器日志
docker logs -tf # 实时日志查看
docker logs -tf --tail number # 显示日志条数
7、查看容器中的进程
docker top 容器id
8、查看容器的元数据
docker inspect 容器id
9、将容器内文件拷贝到主机上面
docker cp 容器id:容器路径 主机路径
命令整理
attach # 当前 shell下 attach 连接指定运行镜像
build # 通过 Dockerfile 定制镜像
commit # 提交当前容器为新的镜像
cp # 从容器中拷贝指定文件或目录到宿主机中
create # 创建一个新的容器,同 run 但不启动容器
diff # 查看 docker 容器变化
events # 从 docker 服务获取容器实时事件
exec # 在已存在的容器上运行命令
export # 导出容器的内容流作为一个 tar 归档文件 对于 【import】
history # 展示一个镜像形成历史
images # 列出 docker 里面的镜像
info # 显示系统相关信息
inspect # 查看容器详细信息
kill # kill 指定 docker 容器
load # 从一个 tar 包中加载一个镜像 【对应 save】
login # 注册或登录一个 docker 源服务器
logout # 从当前 docker registry 退出
logs # 输出当前容器日志信息
port # 查看你映射端口对应的容器内部源端口
pause # 暂停容器
ps # 列出容器列表
pull # 从 docker 镜像源服务器拉取指定镜像
push # 推送指定镜像到 docker 源服务器
restart # 重启运行的容器
rm # 移除一个或者多个容器
rmi # 移除一个或者多个镜像 【移除运行中的镜像则需要加 -f】
run # 创建一个新的容器并运行
save # 保存一个镜像为一个 tar 包 【对应load】
search # 在 docker hub 中搜索镜像
start # 启动容器
stop # 停止容器
stats # 监控容器资源消耗
tag # 给源中镜像添加标签
top # 查看容器中运行的进程信息
unpause # 取消暂停容器
version # 查看 docker 版本号
wait # 截取容器停止时的退出状态值
Docker容器状态
# 停止docker
systemctl stop docker
# 启动
systemctl start docker
# 查看docker状态
systemctl status docker
Docker之run命令的一些参数
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-P: 随机端口映射,容器内部端口随机映射到主机的高端口
-p: 指定端口映射,格式为:主机(宿主)端口:容器端口
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
--volume , -v: 绑定一个卷
Other
# 1、列出无用的卷
docker volume ls -qf dangling=true
# 2、清理无用的卷
docker volume rm $(docker volume ls -qf dangling=true)
# 3、Docker磁盘占用与清理
docker system prune
https://www.jianshu.com/p/470e29801be2
Docker可视化-portainer
Docker图形化界面管理工具,提供一个后台面板供我们操作!
# 1、下载
docker pull docker.io/portainer/portainer
# 2、这里是把portainer端口映射外网的3344
docker run -d -p 3344:9000 \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
--name prtainer01 \
--privileged=true \
docker.io/portainer/portainer
第一次加载可能会比较慢一些。
3、设置密码
4、选择本地即可
Docker数据挂载
有很多时候我们都需要把容器里面的目录和宿主机目录保持同步,比如mysql的data目录conf目录等。
首先先下载两个镜像,一个是centos另一个nginx。
1、通过命令进行挂载
# -v 就是目录挂载
docker run -it -v 宿主机目录:容器目录 centos /bin/bash
宿主机目录如果不存在,则会自动生成
# 查看挂载详情
docker inspect 容器id
2、匿名挂载
docker run -d -p --name nginx01 -v /etc/nginx nginx
# 查看所有卷的信息
docker volume ls
local 44f1b7b73db6a018e50d5ce67615187ecd1e72e5bebd2e7a48fadd550b5b55ac
# 所有的docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/xxxx/_data
扩展:
docker run -d -p --name nginx01 -v /home/nginx:/etc/nginx:ro nginx
docker run -d -p --name nginx01 -v /home/nginx:/etc/nginx:rw nginx
通过 -v 容器内路径:ro rw 改变读写权限
ro realonly # 只读
rw readwrite # 可读可写 (默认)
安装Mysql并挂载
# 获取镜像
docker pull mysql5.7
docker run -d -p 3344:3306 -v (挂载mysql配置文件地址):/etc/mysql/conf.d -v (挂载mysql数据文件地址):/var/lib/mysql -e MYSQL_ROOT_PASSWORD=(mysql密码)--name mysql01 容器id或者容器名称
# 示例:
docker run -d -p 3344:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
# 使用mysql连接工具进行测试
镜像发布到阿里云
# 第一步打包修改之后的镜像--图1
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:版本号
# 第二步 打开阿里云镜像管理中心 https://cr.console.aliyun.com,创建一个 命名空间
# 第三步 创建 镜像仓库 --图2
填写仓库名称,摘要,设置代码源为本地仓库。最后点击创建镜像仓库即可。
# 第四步 点击管理
按照提示即可把自己的镜像源推送到阿里云镜像仓库。
如果不知道或者忘记自己登陆docker的密码,可以点击下面的按钮镜像更改。
# 退出阿里云
docker logout
图1:
图2:
当前共有 0 条评论