Docker容器

Docker 基本使用

2019-07-20  本文已影响9人  dawsonenjoy

基本理解

镜像、容器和仓库

这三个是docker里常见的概念,镜像可以理解成一个个操作系统的安装包,而容器就是我们通过这些安装包安装好的操作系统,仓库则是网上很多存放各种镜像提供你下载的地方

docker是什么

docker就是一个存放了各种容器的平台,供我们来使用。可以理解成:docker从仓库下载下来各种镜像安装包,然后在docker平台上安装他们成容器并存放起来,接着我们就可以用这些根据我们需求选择的容器来做我们想做的事了

为什么要用docker

假如你要部署一个网站,那么你可能需要一台服务器,然后安装环境、配置七七八八的东西,是不是特别麻烦。这个时候有人在网上提供了配置好各种环境的系统,你只要根据需求下载你需要的系统下来就能快速部署你的网站,而且也不怎么费你电脑的资源,或者当你根据自己需求配置好这个系统,还可以再把它弄成新的镜像提供给和你要跑同样环境的人,你说这么好的东西是不是很心动

更多了解参考

http://dockone.io/article/6051

安装环境

配置要求

电脑开启虚拟化,如何查看是否开启参考:https://jingyan.baidu.com/article/48206aea6e9f9d216ad6b3c6.html

安装教程

windows参考:https://www.runoob.com/docker/windows-docker-install.html
(其他系统安装的也都在里面)

配置加速器

由于docker hub是国外的平台,如果不开启加速器,下载镜像的话贼慢,因此很有必要配置一下加速器来加速下载,配置参考:
https://blog.csdn.net/tjsahwj/article/details/88181779

入门示例

建议在配置完前面的加速器后再尝试,不然下载一个镜像得花不知道多久时间...,示例代码如下(按顺序敲就可以了):

$ docker-machine env
# 查看docker环境
$ eval $("E:\OFFICE\Docker Toolbox\docker-machine.exe" env)
# 执行环境
$ docker search python
# 搜索python的docker镜像,根据第一列的NAME来选择一个下载,这里选择第一个
$ docker pull python
# 下载python的镜像,也可以下载nginx的镜像,这个可能太大了
$ docker images
# 查看下载的镜像,可以发现多了一列python的
$ docker run -it python
# 可以看到进入了python的命令行,因为这个镜像进入的默认命令就是`python3`,因此会自动打开命令行
# 可以输入:`exit()`退出命令行
$ docker run --name aaa -it python /bin/bash
# 和刚才一样,都是创建python镜像的容器,不过这次给容器取名叫aaa,并且输入/bin/bash打开terminal终端
# 这个时候就可以输入各种linux系统的命令如:`ls`了,这个就是docker最主要的内容
# 退出时可以通过组合键(`ctrl+p+q`)、命令(`exit`)来退出,前者不关闭容器,后者关闭
$ docker ps
# 查看正在运行的容器,如果要查看所有容器,则后面加上:-a
# 在这里记下容器ID的前几位(只要前面不重复,1位2位都行)
# 前面run命令用了两次,第一个没取名,第二个取名了,所以第一个记下ID
# 假如容器ID是(c6789...),前两位就能判断出是这个容器,那么记下c6就行了
$ docker stop c6 first
# 关闭c6和first这两个容器
$ docker rm c6 first
# 删除这两个容器

通过上面的示例,应该可以大概了解docker是什么,其实可以理解成一个定制的操作系统(也不完全是,但是大体感觉差不多),比如配有java、python环境的操作系统,然后下载下来直接用,并且可以通过命令把我们本地的文件拷贝到里面去运行等等,总之就是个特别方便的东西啦

常用命令

查看版本信息
docker info
查看帮助
docker --help

注:
如果是想查看某个命令的使用帮助则可以使用:

docker 命令 --help
查看环境
docker-machine env
执行环境

查看命令的输出结果里,最后一句去掉注释符号(#)就是

搜索镜像
docker search 名称
// 举例:docker search nginx
下载镜像
docker pull 地址/名称
// 举例:docker pull ubuntu:13.10
// 举例2:docker pull hub.c.163.com/public/nginx:1.2.1
查看镜像
docker images
删除镜像
docker rmi 镜像ID(或:镜像名:tag名,下同)
docker rmi $(docker images -q)
// 一次性删除所有的镜像,-q参数获取所有镜像的ID
设置标签
docker tag 镜像ID 仓库名:标签名
// 举例:docker tag 860c279d2fec runoob/centos:dev
创建容器
docker run -绑定参数 IP:本机被映射端口:映射端口(可选) --name 容器命名(可选) -运行参数 镜像名 执行命令(/bin/bash为打开命令行)
// 举例:docker run -p 8080:80 --name nginx -it hub.c.163.com/library/nginx /bin/bash
// 执行该容器里的/bin/bash文件,即打开命令行交互窗口
// 举例2:docker run -d -p 5000:5000 training/webapp python app.py
// 执行该容器里的app.py文件
// 举例3:docker run -d -p 127.0.0.1:5000:5000/udp training/webapp python app.py
// 比上面的多绑定了IP地址,以及选择udp
// 举例4:docker run -itv //e/test:/home python /bin/bash
// 将本地的E盘共享文件夹test挂载到容器的/home路径下

此时访问对应IP(默认为其提供的私有IP):本机被映射端口即可,若不知道IP,可以通过下面命令查看:

docker-machine ls

注:

-t   在容器内开启一个终端
-i   允许往容器内输入交互命令
-it  结合上面两条可以得出该参数代表进入该容器当中的终端运行
-d   代表后台运行
-p   将容器内部使用的端口映射到我们使用主机的指定端口上
-P   将容器内部使用的端口映射到我们使用主机的随机高位端口上
-v   指定本地共享目录挂载到容器目录当中
查看容器端口绑定
docker port 容器ID(前几位即可,只要不重名,容器名称也可以,后同) 端口号
退出容器
ctrl+p+q  // 退出不关闭容器
exit  // 退出并关闭容器
查看运行的容器
docker ps  // 查看正在运行的容器

注:

-a  查看所有运行过的容器
查看容器输出
docker logs 容器ID
重启容器
docker restart 容器ID
停止容器
docker stop 容器ID
docker kill 容器ID
删除容器
docker rm 容器ID
docker rm $(docker ps -q -a)
// 一次性删除所有的容器

注:
需要容器停止时才能进行删除操作

启动容器
docker start 容器ID
向容器发送命令
docker exec -d 容器ID 命令
进入容器
docker attach 容器ID

注:
进入容器的方法好几种,这个是比较常用的,其他详细可参考:
https://www.cnblogs.com/xhyan/p/6593075.html

查看容器IP
cat /etc/hosts  // 容器内部输入命令
拷贝本机文件到容器
docker cp 本地文件路径 容器名称:容器里的路径

参考:https://jingyan.baidu.com/article/09ea3ede52323fc0afde3956.html

制作并上传镜像

第一步:登录docker hub账号(没有创建一个:地址
docker login
第二步:创建本地自定义镜像
方法1:commit命令创建
docker commit -m "说明" 容器ID 新镜像名:标签
// 举例:docker commit -m "第一个自定义镜像" xxx dawsonenjoy/python:latest
// 建议镜像名以:docker hub账号名/仓库名来命名,不然后面上传镜像时容器出错

此时输入:docker images,就可以发现自己创建的镜像了,这种方法是根据容器来创建镜像,并且操作简易,个人比较推荐

方法2:通过dockerfile创建

参考下面链接:
https://www.cnblogs.com/qiaoyeye/p/10677136.html
https://www.cnblogs.com/lsgxeva/p/8746644.html
这种方法是根据镜像结合自定义命令来创建镜像

第三步:上传镜像
docker push 镜像名
上传镜像出现错误:denied: requested access to the resource is denied解决

参考:
https://blog.csdn.net/wzygis/article/details/78205867
https://blog.csdn.net/shoneworn/article/details/80622268

制作并保存镜像/容器到本地

1.save方式保存镜像/容器到本地文件
docker save -o 新文件名  镜像/容器ID
save命令载入镜像文件
docker load < 文件名

此时输入:docker images会发现多了个镜像
详细参考:https://www.cnblogs.com/lsgxeva/p/8746644.html

2.export方式保存容器到本地文件
docker export -o xxx.tar 容器ID
import命令载入docker镜像文件
docker import xxx.tar 新镜像名

这两者区别可以参考下面链接:
https://my.oschina.net/zjzhai/blog/225112
https://blog.csdn.net/liukuan73/article/details/78089138
(前者文件大,后者文件小;前者偏向制作镜像,后者偏向快照;前者可以回滚,后者不能)

docker镜像下载地址

官方

https://hub.docker.com/search?image_filter=official&type=image

国内

阿里云镜像:https://promotion.aliyun.com/ntms/act/kubernetes.html
网易云镜像:https://c.163yun.com/hub#/m/home/
daoclub镜像:https://hub.daocloud.io/

docker可视化工具kitematic

就是一个能够操作docker的界面程序,如果上面的内容你大致都懂了的话,那这个怎么用你应该也自然就懂啦

上一篇下一篇

猜你喜欢

热点阅读