docker

81 阅读4分钟

1.是由go语言开发的工具,可以实现轻量化的环境搭建及项目部署。

2.docker的核心:

仓库:存放打包好的镜像文件,用于共享。镜像文件的下载方式一般是通过docker服务提供的方法。
镜像:将代码、依赖包和所需要的环境整体打包生成的文件。
容器:通过镜像文件反向生成可以运行的环境。它和linux系统独立。

docker安装:
(1)linux内核版本:要求3.8以上

uname -r

(2)更新yum:

yum update

(3)docker依赖插件安装

yum install -y yum-utils device-mapper-persistent-data lvm2

(4)配置国内镜像源

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

(5)docker 下载

yum install -y docker-1.13.1-162.git64e9980.el7.centos.x86_64

(6)启动|禁用|停止|重启|启动

systemctl enable|disable|stop|restart|start docker

(7)docker镜像获取:

  • 在dockerhub站点上查找应用及指定版本、hub-stage.docker.com/

  • 通过docker命令搜索默认仓库
    docker search 应用名称
    docker search mysql56

  • 通过命令拉取镜像:
    docker pull 镜像名
    docker pull docker.io/1s22s22p6/mysql56

(8) 查看镜像:

docker images
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
docker.io/1s22s22p6/mysql56   latest              e71b6ea26d66        7 years ago         473 MB

(9)创建mysql容器:

docker run -选项 镜像名|镜像id
选项:
    --name   容器名称
    -d   后台运行
    -p   端口映射
    -e   使用密码
    --privileged  使用权限
    
docker run -d --name=mysql56 -p 3307:3306 --privileged -e MYSQL_ROOT_PASSWORD=123456 e71b6ea26d66

(10)查看容器:

docker ps       查看正在运行的容器
docker ps -a    查看所有的容器(包含没有运行的)

(11)停止容器:

docker stop 容器名
    docker stop mysql56

(12)开启容器:

docker start 容器名
    docker start mysql56

(13)容器删除:

容器未运行:
docker rm 容器名
容器正在运行:
docker rm -f 容器名

(14) 进入容器

docker exec -it 容器名 bash
    docker exec -it mysql56 bash

image-20240416111600451

(15)远程授权:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;

(16)如何删除镜像:

docker rmi 镜像名|镜像id
(17)tomcat容器:
docker pulldocker.io/kubespheredev/tomcat85-java8-centos7

docker run -d --name=tomcqt8 -p 8080:8080 -v  /opt/webapps:/usr/local/tomcat/webapps docker.io/kubespheredev/tomcat85-java8-centos7
向/opt/webapps目录下放入woniusales.war文件。
进入容器。修改配置文件

容器数据卷

作用:

卷就是目录或者文件,存在一个或者多个容器中,由docker挂载到容器,但不属于联合文件系统,因此

能够绕过 Union File System , 提供一些用于持续存储或共享数据的特性:

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂

载的数据卷。

特点:

1、数据卷可在容器之间共享或重用数据

2、卷中的更改可以直接生效

3、数据卷中的更改不会包含在镜像的更新中

4、数据卷的生命周期一直持续到没有容器使用它为止

所以:总结一句话: 就是容器的持久化,以及容器间的继承和数据共享!

使用数据卷

方式一:容器中直接使用命令来添加 挂载

# 命令
docker run -it -v 宿主机绝对路径目录:容器内目录 镜像名

# 测试
[root@kuangshen ~]# docker run -it -v /home/ceshi:/home centos /bin/bash

查看数据卷是否挂载成功 docker inspect 容器id

使用 docker 安装 mysql

# 1、搜索镜像
[root@kuangshen ~]# docker search mysql

# 2、拉取镜像
[root@kuangshen ~]# docker pull mysql:5.7

# 3、启动容器 -e 环境变量!
# 注意: mysql的数据应该不丢失!先体验下 -v 挂载卷! 参考官方文档
[root@kuangshen home]# docker run -d -p 3310:3306 -v
/home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e
MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
# 5、查看本地的 /home/mysql 目录
[root@kuangshen data]# pwd
# 6、删除mysql容器
[root@kuangshen data]# docker rm -f mysql01 # 删除容器,然后发现远程连接失败!

注意:如果访问出现了 cannot open directory: Permission denied 解决办法:在挂载目录后多加一个 --privileged=true参数即可

匿名和具名挂载

# 匿名挂载
-v 容器内路径
docker run -d -P --name nginx01 -v /etc/nginx nginx

# 匿名挂载的缺点,就是不好维护,通常使用命令 docker volume维护
docker volume ls

# 具名挂载
-v 卷名:/容器内路径
docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx nginx

# 查看挂载的路径
[root@kuangshen ~]# docker volume inspect nginxconfig

# 改变文件的读写权限
# ro: readonly
# rw: readwrite
# 指定容器对我们挂载出来的内容的读写权限
docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx:ro nginx

docker run -d -P --name nginx02 -v nginxconfig:/etc/nginx:rw nginx