一、 docker 安装
- 如果有旧版本docker需要先通过指令卸载
sudo apt-get remove docker docker-engine docker-ce docker.io
- 更新 apt 包索引
sudo apt-get update
- 为了使apt可以通过https使用Repository,先安装以下包
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common
- 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
在这一步可能会出现Protocol https not supported or disabled in libcurl"
的错误提示,这是因为默认情况下,libcurl不支持https
使用curl -V
指令后,也可以看到curl支持的协议里面不包括https
因为https协议是加密安全的基于http的协议,需要使用openssl的静态库,所以需要支持https就必须下载并安装openssl
sudo apt-get install libssl-dev
下载安装openssl后进入curl文件夹下执行如下指令重新安装curl
./configure --with--ssl
make
make install
此时再次执行curl -V
,可以看到现在curl支持https协议
再次执行之前报错的添加Docker官方GPG密钥指令,执行成功
- 检查GPG Key信息是否正确
sudo apt-key fingerprint 0EBFCD88
-
GPG Key信息如下
-
添加源信息
# 将源信息直接写入/etc/apt/sources.list
$ sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"
- 确认Docker的源信息是否正确, 新的源是否添加成功
sudo apt-cache madison docker-ce
结果如下
- 安装最新版本的Docker CE
sudo apt-get install -y docker-ce
- docker 安装验证
sudo docker version
如果安装成功,将会显示以下结果
二、 docker 基本操作
- 获得帮助
docker --help
- 新建并启动镜像
使用docker run命令即可新建并启动一个容器。
-d:表示后台运行
-p:随机端口映射,例如
- ip:hostPort:containerPort
- ip::containerPort
- hostPort:containerPort
- containerPort
sudo docker run hello-world -d -p 91:80 nginx
-d # 后台运行
-p 宿主机端口:容器端口 # 开放容器端口到宿主机端口
- 运行第一个容器
运行Hello World,校验Docker是否安装成功。运行这个命令会下载一个hello-world的镜像, 并且运行在一个容器中。该容器运行时会有如下输出
docker run hello-world
- 运行镜像
要点:-it 参数,通过终端与进程(容器)交互,stdin,stdout,stderr定向到 TTY
docker run -it ubuntu bash
- 搜索镜像
使用docker search命令搜索存放在Docker Hub中的镜像
sudo docker search java
执行该命令后,Docker就会在Docker Hub中搜索含有 java 这个关键词的镜像仓库
- 下载镜像
sudo docker pull java
执行该命令后,Docker会从Docker Hub中的java仓库下载最新版镜像,其他镜像的下载类似
- 显示本地镜像库内容
docker images
REPOSITORY:镜像所属仓库名称
TAG:镜像标签。默认是latest,表示最新
IMAGE ID:镜像ID,表示镜像唯一标标识
CREATED:镜像创建时间
SIZE:镜像大小
- 删除镜像
删除指定名称的镜像方法如下
sudo docker rmi hello-world
删除所有镜像
sudo docker rmi -f $(docker images)
其中 -f
参数表示强制删除
- 显示运行中容器
docker ps
- 显示所有容器(包含已中止)
docker ps -a
CONTAINER_ID:表示容器ID
IMAGE:表示镜像名称
IMAGE:表示镜像名称
CREATED:表示容器创建时间
STATUS:表示容器运行状态。UP表示运行中,Exited表示已停止
PORTS:表示容器对外的端口号
NAMES:表示容器名称,该名称默认由Docker自动生成,也可使用docker run命令的–name选项自定指定
- 继续运行原容器并进入
docker restart命令实际上是先执行了docker stop命令,然后再执行了docker start命令
docker attach命令可以进入运行中的容器
docker restart sharp_payne
docker ps
docker attach sharp_payne
- 删除容器
删除指定容器(已停止)
sudo docker rm sharp_payne
删除指定容器(未停止)
sudo docker rm -f sharp_payne
删除所有容器
sudo docker rm -f $(docker ps -a -q)
三、 MySQL与容器化
- 拉取 MySQL 镜像
docker pull mysql:5.7
文件比较大,因此可能会下载的很慢,如果其中一项下载失败可能需要多试几次
- 启动服务器
sudo docker run -p 3306:3306 --name mysql2 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
-p:端口映射。将容器的3306端口映射到宿主机的3306端口。[宿主机]:[容器]
-e:设置环境变量。这里是设置root账号的密码为root
–name:将容器命名为mysql2
- 启动 MySQL 客户端
docker run -it --net host mysql:5.7 "sh"
mysql -h127.0.0.1 -P3306 -uroot -proot
...
mysql>
sudo docker run -it --rm --net host mysql:5.7 "sh"
启动了容器内 sh 进程- -it 等价于 -i -t ,表示使用当前 stdin 和 stdout 作为该进程的 io
- –rm , 当该进程结束时,自动清理该容器的文件系统空间
- –net host,表示容器使用当前主机的网络环境
-
mysql 基本数据库操作
- 创建数据库 test :
create datebase test;
- 查询数据库:
show databases;
- 设定 test 为当前数据库:
use test;
- 删除数据库 test:
drop database test;
- 显示表:
show tables;
- 显示表 userinfo 结构:
describe userinfo
- 执行查询语句:
sql statement;
- 创建数据库 test :