Docker:Ubuntu18.10中安装与使用Docker

本文详细介绍了在Ubuntu18.10系统中如何安装与使用Docker,包括Docker的基本命令、镜像源配置、容器创建与管理、Docker容器部署应用如MySQL、Tomcat、Redis和Nginx等,并涉及Docker Compose、迁移与备份等内容。
摘要由CSDN通过智能技术生成

Ubuntu中安装与使用Docker

不同的Linux版本,安装Docker Container Engine(Docker容器引擎)的方法不尽相同,需要根据各自的系统版本去安装。以下是在ubuntu-18.10-live-server-amd64 系统中安装Docker CE。

# 安装Docker CE,依次执行以下指令
$ sudo apt-get remove docker docker-engine docker.io containerd runc 

$ sudo apt-get update

# linux curl是通过url语法在命令行下上传或下载文件的工具软件
# 最后有一个中划线
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

$ sudo apt-get update

$ sudo apt-get install docker-ce docker-ce-cli containerd.io	# 会下载390M左右的数据

# 安装好Docker后,查看其状态
$ sudo systemctl status docker	

# 运行hello-world映像,验证Docker CE是否已正确安装
$ sudo docker run hello-world

1568050469343



Docker容器引擎,就安装成功了!

1. Docker常用命令

这是docker本身的指令,跟Linux系统的版本就没有关系了!

1.1 一些通用命令

# 获取有关Docker版本的信息
$ sudo docker version
$ docker -v

# 获取所有可用Docker命令的列表
$ docker

1.2 镜像相关命令

1.2.1 查看镜像

# 查看当前系统可用的镜像
$ sudo docker images

###1.2.2 搜索镜像 + 拉取镜像

# 在线搜索镜像
$ sudo docker search 镜像名称
$ sudo docker search centos7

# 拉取镜像
# 就是从Docker仓库下载镜像到本地,镜像名称格式为 “名称:版本号”,如果版本号不指定则是最新的版本
$ sudo docker pull centos:7

###1.2.3 删除镜像

要求所删除的镜像不能被任何的容器正在使用,否则需要先删除容器,再删除镜像。

# 查看当前宿主机可用的镜像
$ sudo docker images

# 删除镜像
$ sudo docker rmi centos	# 使用名称删除镜像
$ sudo docker rmi 镜像id	   # 按照镜像id删除镜像

# 删除所有镜像
$ sudo docker rmi `docker images -q`	# 反单引

1.2.4 镜像源配置

ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。

需要给Linux系统添加一个配置文件:/etc/docker/daemon.json

国内比较好用的几个镜像源 :

Docker 官方中国区:https://registry.docker-cn.com
网易:http://hub-mirror.c.163.com
中国科技大学:https://docker.mirrors.ustc.edu.cn
阿里云:https://y0qd3iq.mirror.aliyuncs.com

配置ustc镜像源

# 在宿主机中操作
# 新建目录及文件
$ sudo mkdir /etc/docker # 创建目录
$ sudo vim /etc/docker/daemon.json # 创建docker的配置文件.	默认情况下,是没有这个配置文件的

# 在文件中添加如下内容	
{ 
	"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

# 重启docker服务
$ sudo service docker restart

# 验证镜像源配置是否成功
$ sudo docker info|grep Mirrors -A 1	# 会看到配置镜像源信息

1.3 容器相关命令

容器,也是docker中的核心概念,容器是由镜像运行产生的运行实例。镜像和容器的关系,就如同Java语言中类和对象的关系。 (镜像是类,容器就是对象)

Docker提供的关于容器的操作有:

  • 查看容器
  • 创建容器
  • 启动容器
  • 停止容器
  • 文件拷贝
  • 目录挂载
  • 查看容器ip地址
  • 删除容器

1.3.1 查看容器

# 查看正在运行过的容器
$ sudo docker ps
#查看所有容器
$ sudo docker ps -a

1.3.2 创建容器

可以基于已有的镜像来创建和启动容器,创建与启动容器使用命令:

语法格式:$ 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:7

# 创建并启动名称为 mycentos7_inter 的交互式容器;下面指令中的镜像名称 centos:7 也可以使用镜像id
# /bin/bash  表示进入容器后,shell脚本(指令)使用的解析器
$ sudo docker run -it --name=mycentos7_inter centos:7 /bin/bash

参数说明:

-i:表示运行容器

-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。

–name :为创建的容器命名。

创建容器成功后,Linux指令中显示的用户标识也跟着变了

[root@030d34106602 /]# 切换成root用户操作了,不然指令执行都在验证,执行速度太慢!

想要退出当前容器,执行exit指令。

是否创建成功,可以通过docker psdocker ps -a查看容器。

守护式容器

对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。

命令如下(同一主机中的容器间名称不能重复):

# 创建并启动守护式容器
$ sudo docker run -di --name=mycentos7_daemon centos:7

# 退出容器
$ sudo docker exec -it mycentos7_daemon /bin/bash

# 登录进入容器,命令为:(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查看正在运行的容器,可以看到上面启动的守护式容器,还在运行中。

那么问题来了? 我要怎么退出一个守护式容器呢??–>看下面“停止容器”

1.3.3 停止与重启容器

# 停止正在运行的容器:docker stop 容器名称或者ID
$ sudo docker stop mycentos7_daemon

# 停止守护式容器后,再查看正在运行的容器中,有没有被停止的守护式容器
$ sudo docker ps

# 启动已运行过的容器(QQQQ: 没有运行的过的容器,能否用这种方式启动?):docker start 容器名称或者ID
$ sudo docker start mycentos7_daemon

1.3.4 文件拷贝

  • 将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 容器名称:容器目录 需要拷贝的文件或目录
# 进入容器后,如果没有什么文件,就创建一个,如文件c.txt
$ sudo touch c.txt

# 退出容器
$ sudo exit

# 在Linux宿主机器执行复制
# 将容器 mycentos7_daemon 中根目录/下的c.txt文件复制到Linux宿主机器的/root目录下
$ sudo docker cp mycentos7_daemon:/c.txt /root

注意:容器在停止状态下,也可以完成文件的拷贝。

1.3.5 目录挂载

可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件 从而去影响容器。

创建容器时添加-v参数,后边为宿主机目录:容器目录

例如: sudo docker run -di -v /usr/local/test:/usr/local/test --name=mycentos3 centos:7

QQQQ:如果我现在已有容器了,想要来建立一个挂载目录,怎么办呢?

创建容器时,建立挂载目录:

# 创建linux宿主机器要挂载的目录
$ sudo mkdir /usr/local/test

# 创建并启动容器 mycentos3,并挂载linux中的/usr/local/test目录到容器的/usr/local/test目录
# 后面,在linux中的/usr/local/test中操作,相当于对容器相应目录操作
# 创建一个守护式容器
$ sudo docker run -di -v /usr/local/test:/usr/local/test --name=mycentos3 centos:7

# 在linux宿主机下,创建文件
$ sudo touch /usr/local/test/def.txt

# 进入容器
$ sudo docker exec -it mycentos3 /bin/bash

# 在容器中,查看目录中是否有对应文件def.txt
$ sudo ll /usr/local/test

参数说明:

-i:表示运行容器

-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。

–name :为创建的容器命名。

-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件 映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。

-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器)。

另外,还要注意:

如果你共享的是多级目录,可能会出现权限不足的提示。 这是因为CentOS7中的安全模块selinux把权限禁掉了,需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题。

1.3.6 查看容器ip

语法:docker inspect 容器名称(容器ID)

# 在linux宿主机下查看容器的ip
$ sudo docker inspect mycentos7_daemon

注意:

容器之间在一个局域网内,linux宿主机器可以与容器进行通信;但是外部的物理机笔记本是不能与容器直接通信的,如果需要则要通过宿主机器端口的代理。

1.3.7 删除容器

分为删除指定容器,与删除所有容器

语法:

​ 删除指定窗口:docker rm 容器名称(容器ID)

# 删除指定容器
$ sudo docker rm mycentos_daemon

# 删除所有容器
$ sudo docker rm `docker ps -a -q`	# 反单引

如果容器是运行状态,则会删除失败,需要停止容器才能删除。

2. Docker容器部署应用

在Docker容器中部署应用程序,就相当于是安装软件。

以安装如下应用程序为例:

  • MySQL
  • Tomcat
  • Redis
  • Nginx

2.1 MySQL容器部署

###查看与搜索镜像

查看一下当前Linux主机中有哪些镜像及容器:

# 查看镜像
$ sudo docker images

# 查看容器
$ sudo docker ps -a  # 查看全部容器

# 搜索一下mysql有哪些镜像
$ sudo docker search mysql

###拉取镜像

# Linux宿主机中操作:拉取MySQL的镜像,如果有了就不需要再拉取了
$ sudo docker pull centos/mysql-57-centos7

创建容器

# Linux宿主机中操作:使用镜像创建容器
$ sudo docker run -di --name=mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root centos/mysql-57-centos7

参数说明:

-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t 两个参数,就是创建交互式容器了。)。

-i:表示运行容器

–name :为创建的容器命名。

-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

-e 代表添加环境变量 MYSQL_ROOT_PASSWORD 容器中的MySQL的root用户密码,作为root用户远程登陆之用(如果是在容器中使用root用户登录的话, 那么其密码为空)

操作容器中的MySQL

# 登录进容器
$ sudo docker exec -it mysql5.7 /bin/bash

# 登录容器里面的mysql
$ sudo mysql -u root -p		# 在容器中使用root用户登录的话,不需要输入密码,密码写为空

参数说明:

-i:表示运行容器

-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。

远程登录MySQL

# 查看ip
# 如果要内部连接该mysql(指当前Linux宿主机内),比如其他容器要连接mysql容器的mysql的时候,可以使用如下命令查看Ip
$ sudo docker inspect mysql5.7

默认情况下,MySQL容器的IP地址为"IPAddress": "172.17.0.2"

使用Navicat在windows中进行远程登录,连接在docker容器中的MySQL数据库。

docker容器中的MySQL数据库的参数:

​ 主机名或地址:虚拟机IP

​ 端口:3306

​ 用户名:root

​ 密码:root

地址映射关系图示

1568128537269

2.2 Tomcat容器部署

###安装并启动tomcat容器

# 查询
$ sudo docker search tomcat

# 拉取镜像
$ sudo docker pull tomcat:7

# 创建tomcat容器,并挂载webapps目录
# 要确保虚拟机存在/usr/local/tomcat/webapps目录,没有的话要先创建好
$ sudo docker run -di --name=mytomcat7 -p 9090:8080 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat

# 如果出现 WARNING: IPv4 forwarding is disabled. Networking will not work.
#执行如下操作
# 1、编辑 sysctl.conf
vi /etc/sysctl.conf
# 2、在上述打开的文件后面添加如下配置:打开IPv4 forwarding
net.ipv4.ip_forward=1
# 3、重启network
systemctl restart network

参数说明:

-i:表示运行容器

–name :为创建的容器命名。

-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件 映射。注意:最好做目录映射,这样就可以在宿主机上做修改,然后直接共享到容器上。

-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t 两个参数,创建后就会自动进去容器)。

-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

测试tomcat安装成功与否

本地主机通过浏览器访问虚拟机的9090端口,我的地址为:http://192.168.178.147:9090

此时,会显示404错误,说明是资源找不到。

​ 原因:宿主机/usr/local/tomcat/webapps下没有任何资源,对应映射到容器Tomcat的webapps目录中也没有任何项目资源,所以访问不到。

# 进入容器tomcat中去查看
# 进入的默认目录就是 `root@c632fdf96976:/usr/local/tomcat#`
$ sudo docker exec -it mytomcat7 /bin/bash

# 查看容器tomcat的webapps目录,可见它是空目录,没有任何资源

# 可以往tomcat的/user/local/tomcat/webapps下部署应用,然后再访问

1568132292904



2.3 Redis容器部署

安装并运行Redis容器

# 查询redis镜像
$ sudo docker search redis

# 拉取redis镜像,如果有3.2版本及以上,最好安装它们
$ sudo docker pull redis

# 创建并启动redis容器
$ sudo docker run -di --name=myredis -p 6379:6379 redis

# 进入redis容器
$ sudo docker exec -it myredis /bin/bash	# 默认进入到‘root@5a543e59cf93:/data#’

# 容器中启动redis客户端,进行数据操作
$ sudo cd /usr/local		# 进入redis安装目录
$ sudo cd /usr/local/bin	# 进入redis安装程序的bin目录
$ sudo ./redis-cli			# 启动redis客户端

[外链图片转存失败(img-hC32Yfyl-1569083889276)(F:\pics4MarkDown\1568133487915.png)]

远程连接Redis

使用Redis Desktop Manager管理工具连接

1568133819652

2.4 Zookeeper容器部署

# 查询镜像
$ sudo docker search zookeeper

# 拉取镜像
$ sudo docker pull zookeeper

# 创建并启动 zookeeper 容器
$ sudo docker run -di --name=myzookeeper -p 2181:2181 zookeeper

# 查看是否成功启动
$ sudo docker ps # 查看正在运行的容器

2.5 Nginx容器部署

# 查询镜像
$ sudo docker search nginx

# 拉取镜像
$ sudo docker pull nginx

# 创建并启动 nginx 容器
$ sudo docker run -di --name=mynginx -p 80:80 nginx

# 本地主机访问Nginx容器		http://宿主虚拟机IP/
192.168.178.147	# 80端口可以不写

Docker Compose

Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。

它是一个定义和运行多容器的 docker应用工具。

使用compose,通过配置docker-compose.yml文件同时启动多个容器。

迁移与备份

Dockerfile

私有镜像仓库

eper

拉取镜像

$ sudo docker pull zookeeper

创建并启动 zookeeper 容器

$ sudo docker run -di --name=myzookeeper -p 2181:2181 zookeeper

查看是否成功启动

$ sudo docker ps # 查看正在运行的容器




## 2.5 Nginx容器部署

```sh
# 查询镜像
$ sudo docker search nginx

# 拉取镜像
$ sudo docker pull nginx

# 创建并启动 nginx 容器
$ sudo docker run -di --name=mynginx -p 80:80 nginx

# 本地主机访问Nginx容器		http://宿主虚拟机IP/
192.168.178.147	# 80端口可以不写
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值