Docker的安装与启动
Docker可以运行在MAC、Windows、CentOS、DEBIAN、UBUNTU等操作系统上,提供社区版和企业版 。
- 安装在windows系统时,要求windows系统是win10专业版;
- 安装在Linux系统中时,要求Linux是64位的。如果使用CentOS系统,建议使用CentOS7(因为Docker对CentOS7的支持不太好)
下面,在CentOS7.6-64Bit系统下安装Docker。
(这里用的腾讯云服务器!)
目标:在线安装docker,并使用命令启动、停止docker
实现步骤:
- 修改yum源为ustc; 使用其他厂商的镜像服务器也可以,常用的如Aliyun
- 安装docker;
- 修改docker的镜像源为ustc;
- 使用docker命令操作docker
这是在线安装,需要联网才行,而且网速要好(下载速度不低于1M/s)。
安装Docker
以下在root用户下执行。
# 1、yum 包更新到最新
yum update
# 2、作用:安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依
赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 设置yum源(以下2选1即可)
# 3.1、方案一:使用ustc的(推荐) 这个网站的连接不需要翻墙
yum-config-manager --add-repo http://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
# 3.2、方案二:使用阿里云(可能失败)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 4、 安装docker;出现输入的界面都按 y
yum install -y docker-ce
# 5、 查看docker版本
docker -v
设置镜像源
ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。
国内比较好用的几个镜像源 :
Docker 官方中国区:https://registry.docker-cn.com
网易:http://hub-mirror.c.163.com
中国科技大学:https://docker.mirrors.ustc.edu.cn
阿里云:https://y0qd3iq.mirror.aliyuncs.com
需要给Linux系统添加一个配置文件:/etc/docker/daemon.json
# 新建目录及文件
$ mkdir /etc/docker # 创建目录
$ vim /etc/docker/daemon.json # 创建docker的配置文件
# 如果系统刚安装时,没有vim工具,可以使用vi指令。或者安装vim
$ sudo yum install vim
# 在daemon.json文件中添加如下内容
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}
# 重启docker服务(docker内运行的所有容器都会停止,这就相当于windwos系统重启,应用程序都会被关闭。)
$ sudo systemctl restart docker
# 验证镜像源配置是否成功
$ docker info|grep Mirrors -A 1 # 会看到配置镜像源信息
如果使用ustc镜像源下载镜像比较慢的话,可以考虑换成阿里云的。
Docker的启动与停止
# 启动docker服务:
systemctl start docker
# 启动docker服务(docker的守护进程)后,运行docker的hello-world程序,来验证是否成功安装并启动
docker run hello-world
# 停止docker服务:
systemctl stop docker
# 重启docker服务:
systemctl restart docker
# 查看docker服务状态:
systemctl status docker
# 设置开机启动docker服务:
systemctl enable docker
1. Docker常用命令
这是docker本身的指令,跟Linux系统的版本就没有关系了!
- **从这开始,均使用的是
guest
用户进行的操作。$
符号开关,表示当前用户是非root用户。
先修改一下/etc/sudoers
文件的配置内容,给guset
赋予能够执行一切指令的权限:
1.1 一些通用命令
# 获取有关Docker版本的信息
$ docker -v
# 获取所有可用Docker命令的列表
$ docker
1.2 镜像相关命令
查看镜像
# 查看当前系统可用的镜像
$ docker images
搜索镜像 + 拉取镜像
# 在线搜索镜像
$ docker search 镜像名称
$ docker search centos
# 拉取镜像
# 就是从Docker仓库下载镜像到本地,镜像名称格式为 “名称:版本号”,如果版本号不指定则是最新的版本
$ docker pull centos:7
删除镜像
要求所删除的镜像不能被任何的容器正在使用,否则需要先删除容器,再删除镜像。
# 查看当前宿主机可用的镜像
$ sudo docker images # 普通用户只用docker images指令是没权限查看镜像列表的
# 删除镜像
$ sudo docker rmi centos # 使用名称删除镜像
$ sudo docker rmi 镜像id # 按照镜像id删除镜像
# 删除所有镜像
$ sudo docker rmi `docker images -q` # 反单引
1.3 容器相关命令
容器,也是docker中的核心概念,容器是由镜像运行产生的运行实例。镜像和容器的关系,就如同Java语言中类和对象的关系。 (镜像是类,容器就是对象)
Docker提供的关于容器的操作有:
- 查看容器
- 创建容器
- 启动容器
- 停止容器
- 文件拷贝
- 目录挂载
- 查看容器ip地址
- 删除容器
查看容器
# 查看正在运行过的容器
$ sudo docker ps
#查看所有容器
$ sudo docker ps -a
创建容器
可以基于已有的镜像来创建和启动容器,创建与启动容器使用命令:
语法格式:$ sudo docker run [参数列表] 使用的镜像名称或ID /bin/bash
参数说明:
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
–name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件 映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
交互式容器
什么是交互式容器?启动容器之后会直接进入容器的命令行终端,如果退出容器,则容器停止运行。
命令行终端进入容器中时,使用exit
命令退出容器。
# 先查询当前主机中可用的镜像
$ sudo docker images
# 拉取一个镜像;这一步不是每次启动容器都要做的,如果主机中已有此镜像,就无需再拉取了
$ sudo docker pull centos
# 创建并启动名称为 mycentos7_inter 的交互式容器;下面指令中的镜像名称 centos 也可以使用镜像id
# /bin/bash 表示进入容器后,shell脚本(指令)使用的解析器
$ sudo docker run -it --name=mycentos7_inter centos /bin/bash
参数说明:
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
–name :为创建的容器命名。
创建容器成功后就直接进入了容器,Linux指令中显示的用户标识也跟着变了
[root@030d34106602 /]#
一进入容器,默认是拥有的root用户权限
想要退出当前容器,执行exit
指令。
是否创建成功,可以通过$ docker ps
或$ docker ps -a
查看容器。
守护式容器
对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。(docker本身就有一个守护进程,也就是可以在后台运行的进程,它的作用就是保持docker程序处于运行之中。)
命令如下(同一主机中的容器间名称不能重复):
# 创建并启动守护式容器
$ sudo docker run -di --name=mycentos7_daemon centos
# 登录进入容器,命令为:(exit退出时,守护式容器不会停止)
$ sudo docker exec -it container_name (或者 container_id) /bin/bash
$ sudo docker exec -it mycentos7_daemon /bin/bash
参数说明:
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
–name :为创建的容器命名。
-d:分离模式,在后台运行命令。在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器)。
然后登录进容器
再使用exit
指令退出守护式容器,再用docker ps
查看正在运行的容器,可以看到上面启动的守护式容器,还在运行中。
那么问题来了? 我要怎么退出一个守护式容器呢??–>看下面“停止容器”
停止与启动容器
要回到宿主机中来执行docker命令(容器中是没有安装docker的)
# 停止正在运行的容器:docker stop 容器名称或者ID
$ sudo docker stop mycentos7_daemon
# 停止守护式容器后,再查看正在运行的容器中,看看守护式容器有没有被停止
$ sudo docker ps
# 启动已运行过的容器(QQQQ: 没有运行的过的容器,能否用这种方式启动?):docker start 容器名称或者ID
$ sudo docker start mycentos7_daemon
文件拷贝
-
将linux宿主机中的文件拷贝到容器中
语法:
docker cp 需要拷贝的文件或目录 容器名称:容器目录
# 在主机根目录下,创建一个文件abc.txt
$ sudo touch a.txt
# 在主机目录下,执行指令。
# 复制a.txt到 mycentos7_daemon 容器的 / 目录下 要保证容器已启动
$ sudo docker cp a.txt mycentos7_daemon:/
# 进入 mycentos7_daemon 容器
$ sudo docker exec -it mycentos7_daemon /bin/bash
# 查看容器 / 目录下文件
$ sudo ll
参数说明:
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
- 将文件从容器内拷贝出来到linux宿主机中
语法:docker cp 容器名称:容器目录 需要拷贝的文件或目录