docker基础操作+创建使用mysql nginx nginx zookeeper tomcat


https://www.runoob.com/docker/docker-tutorial.html

1. 安装Docker

sudo yum update
# 安装需要的软件包,yum-util提供yum-config-manager功能,其他两个提供devicemapper驱动依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
#设置yum源
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 安装docker
sudo yum install docker-ce
# 查看版本
docker -v 

2. ustc镜像

linux镜像服务提供者,加速很快,ustc docker mirror的优势之一是不需要注册,真正的公共服务。

https://lug.ustc.edu.cn/wiki/mirrors/help/docker

# 创建文件
/etc/docker/daemon.json
# 写入内容
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

3. 启动停止docker

systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl status docker
systemctl enable docker # 开机启动
docker info # 查看docker概要信息
docker --help [command]

4. 命令集

docker -help

4.1 查看已下载镜像

  1. repository 镜像名称,TAG 镜像标签,IMAGE ID 镜像id,CREATED创建日期(非获取日期),SIZE 镜像大小

  2. 全部存储在Docker宿主机的/var/lib/docker

docker images 

4.2 搜索镜像

从网络中查找需要的镜像.

starts 用户评价 数量越多评价越好, official 是否官方

AUTOMATED 自动构建,表示该镜像由Docker Hub自动构建流程创建的

docker search 镜像名称

4.3 拉取镜像

docker pull 镜像名称:TAG # 不指定TAG时默认最新版Latest
# 如 docker pull redis ==> docker pull redis:latest

4.4 删除镜像

# 按id删除, 当前镜像有运行中容器不允许删,需要停止当前镜像所有容器
docker rmi 镜像id # rmi ==> remove image
# 删除所有镜像
docker rmi `docker images -q`

4.5 查看运行状态

# 正在运行
docker ps
# 查看所有容器
docker ps -a
# 查看最后一次运行的容器
docker ps -l
# 查看停止的容器
docker ps -f status=exited

4.6 创建与启动容器

docker run
参数:
-i 运行容器
-t 表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
--name:为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i-t两个参数,创建后就会自动进容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个p做多个端口映射
4.6.1 交互式方式创建容器
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
# /bin/bash ==> 加载命令行能执行一些命令
docker run -it --name="myredis" redis:latest /bin/bash
# root@c5b5509d7acd:/data#
exit # 退出到宿主机,容器会关闭 docker ps -a 可以查看到已经关闭
4.6.2 守护式创建容器
docker run -di --name=容器名称 镜像名称:标签
docker exec -it 容器名称 /bin/bash # 进入启动了的容器
exit # 退出以后还在运行
4.6.3 容器重命名
docker rename 原容器名  新容器名
4.6.4 查看容器挂载目录
docker inspect container_name | grep Mounts -A 20
4.7. 停止容器
docker stop id/容器名字

4.8 启动容器

docker start id/容器名字

4.9 拷贝

4.9.1将文件拷贝到容器内
docker cp 需要拷贝的文件或目录 [拷贝后的名字] 容器名称:容器目录
4.9.2 将容器中的文件拷贝出来
docker cp 容器名称:容器目录/需要拷贝的文件或目录 [拷贝后的名字]

4.10.0 查看容器

docker container ls

4.10 目录挂载

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

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

docker run -di -v /usr/1ocal/myhtml:/usr/1ocal/myhtml --name-mycentos3 centos:7
docker run -di --name=mytomcat9 -p 8080:8080 -v /usr/1ocal/webapps:/usr/1ocal/tomcat/webapps 镜像名称

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

4.11 查看容器各种数据

可以格式化输出,见4.12

docker inspect 容器名称(容器ID)
4.12 查看容器ip地址

其他数据也可以用类似的方式,格式化输出

docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称/id

4.13 删除容器

# 只能删除停止的容器 docker rm 容器名称/id
docker rm 容器名称/id

5. 实例

这里只写了会用的一些,用来练手docker命令,如果想要看其他的特定的还是自己仔细研究一下吧。。。

5.0 docker hub查找镜像版本

查找 Docker Hub 上的 软件 镜像:

https://hub.docker.com/_/软件名?tab=tags

如:https://hub.docker.com/_/mysql?tab=tags

找到对应版本(顺带复制命令)

5.1 MySQL

# 拉取镜像
docker pull mysql:8
# 创建容器, 55555:3306端口映射 通过访问容器的55555端口访问mysql的3306端口 , mysql:8 镜像名称
# MYSQL_ROOT_PASSWORD=root root用户密码
docker run -di --name=docker_mysql8 -p 55555:3306 -e MYSQL_ROOT_PASSWORD=root mysql:8
# 创建成功后控制台会打印出完整id:777f4abd7b5da9505528fd14aa400f9043aca119e3d69a45509404ad2658f5cc
# 查看容器ip
172.17.0.2
# 尴尬了,本地没装mysql,默认又只是localhost,需要到容器内部去改
# 进入容器
docker exec -it docker_mysql8 bash
# 登录
mysql -uroot -p
# 改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'fuck!';
#添加远程登录用户
CREATE USER 'remote'@'%' IDENTIFIED WITH mysql_native_password BY 'remote!';
# 添加远程登陆权限
GRANT ALL PRIVILEGES ON *.* TO 'remote'@'%';
# 然后还是不可以,因为是在win10 -> VMware -> centos -> docker
# 增加路由
route add -p 172.17.0.0 mask 255.255.255.0 192.168.40.133
#本机->虚拟网卡(192.168.110.1)->centos虚拟机ip(192.168.40.133)->linux虚拟机里的虚拟网卡(172.17.41.1)->docker容器(172.17.0.2)
本机 ping 172.17.0.2 成功!
(但是只能通过3306端口连接,而不能通过55555映射)
# 然后突然灵光一现,反应过来了 md 瞎折腾脑残了
# 直接连接虚拟机的55555就行了,因为docker是在centos上跑的,映射端口自然是虚拟机的,我连接docker内部的搞个鬼。。
mysql -uroot -p -h 192.168.40.133 -P 55555 # 成功登陆 mdzz
# 弥补错误,删除刚才添加的路由表,再见
route delete 172.17.0.0

通过docker ps查看s

[root@localhost etc]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
777f4abd7b5d mysql:8 “docker-entrypoint.s…” 59 seconds ago Up 58 seconds 33060/tcp, 0.0.0.0:55555->3306/tcp docker_mysql8

5.2 Tomcat

# 前面9.0是tomcat版本 后面是jdk版本
docker pull tomcat:9.0-jdk8-corretto
# -v 挂载目录 宿主机目录:目标目录
docker run -di --name=mytomcat9 -p 8080:8080 -v /usr/1ocal/webapps:/usr/1ocal/tomcat/webapps tomcat:9.0-jdk8-corretto

curl 192.168.40.133:8080

5.3 Nginx

docker pull nginx:1.17.7-perl
docker run -di --name=nginx1.7 -p 80:80 nginx:1.17.7-perl

curl 10.25.208.66
docker exec -it nginx1.7 bash
cd etc/nginx/conf.d/
# 然后会看见一个配置文件
default.conf
# 通过查看配置文件发现静态资源默认位置/usr/share/nginx/html,默认有两个文件50x.html  index.html
# 静态资源,直接使用docker命令拷贝进去就行了
docker cp opms-web nginx1.7:/usr/share/nginx/html
# 复制进去以后测试意识到路径问题,将opms-web里面的内容直接全部移动到外面来就行了
# docker里面删除目录只能rm -rf opms少个rm -f 都不行。。

5.4 Redis

docker pull redis:5.0.7
docker run -di --name=redis5 -p 6379:6379 redis:5.0.7
# 启动redis客户端
redis-cli -h 10.25.208.66
# 测试一下
10.25.208.66:6379> set test value
OK
10.25.208.66:6379> get test
"value"
10.25.208.66:6379>

5.5 ZooKeeper

docker pull zookeeper:3.5.6
# 注意这里没有用端口映射,也可以用上,虽然本机上有zookeeper,但是绑定端口的方式上面redis已经用过了,来点不一样的
docker run -di --name zk zookeeper:3.5.6
# 由于没有映射,所以外部是不能访问的,如下命令:启动一个zookeeper镜像,并且运行这个镜像内的zkCli.sh命令,命令参数是-server zookeeper
docker run -it --rm --link zk:zookeeper zookeeper:3.5.6 zkCli.sh -server zookeeper
# 然后就能连上随意操作了
# zk集群参考https://segmentfault.com/a/1190000006907443

6 备份、迁徙

6.1 将容器保存为镜像

之前修改的内容就能得以保存了

docker commit 容器名称 新起的镜像名字 
docker ps #直看

6.2 备份镜像

docker save -o filename 镜像名称

6.3 恢复镜像

docker load -i filename
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值