Docker容器详细操作

Docker操作

  • 镜像篇
    • 下载镜像
    • 导入镜像文件
    • 删除镜像文件
    • 查看镜像
    • 导出镜像文件
    • 运行镜像文件
  • 容器篇
    • 查看容器
    • 启动容器
    • 进入(exec)指定容器
    • 从容器(Container)中退出(exit)
    • 停止运行的容器
    • 重新启动容器
    • 删除容器
    • 清理所有处于终止状态容器
  • 管理容器篇
    • 创建数据卷
    • 查看所有数据卷
    • 查看指定 数据卷 的信息
    • 启动挂载数据卷的容器
    • 删除数据卷(如果数据卷被容器使用则无法删除)
    • 清理无主数据卷
    • 挂载主机目录
    • 查看挂载目录信息
    • 挂载在主机目录与挂载在数据卷的区别
  • Docker镜像制作实践篇
    • 制作JDK镜像
      • 新建一个文件夹(jdk)
      • 创建Dockerfile文件
      • 创建JDK镜像文件
      • 运行JDK镜像(image)文件
    • 制作Sentinel镜像
      • 新建一个文件夹(sentinel)
      • 创建Dockerfile文件
      • 创建JDK镜像文件
      • 后台运行sentinel容器
      • 查看sentinel容器
      • 访问sentinel服务
  • 镜像安装实践篇
    • 安装MySql数据库
      • 下载mysql镜像
      • 新建文件mysql并复制文件到此文件夹
      • 进入文件夹导入mysql镜像
      • 检查mysql镜像
      • 启动运行mysql镜像(即启动一个容器)
      • mysql服务操作
        • 进入容器 (退出容器用exit)
        • 新建mysql数据库文件并放入xx.mysql
        • 启动mysql服务
        • 登陆(默认密码root)数据库
        • 导入数据
        • 退出数据库
        • 停止mysql服务(可选)
        • 设置mysql开机自启动(可选)
    • 安装redis数据库
      • 下载redis镜像
      • 新建文件redis并复制文件到此文件夹
      • 进入文件夹导入redis镜像
      • 检查redis镜像
      • 准备配置文件
        • 创建redis配置文件目录
        • 在配置文件录下创建redis.conf配置文件
        • 查看正在运行的进程
      • 访问redis服务器
        • 控制台直接连接redis测试
        • 检测redis 版本
        • 登录redis(默认不需要密码)
        • 启动redis服务
        • 停止redis服务
        • 重启 redis 服务(可选)
        • 设置redis 开机自启动(可选)
    • 安装ngnix
      • 下载ngnix镜像
      • 新建文件ngnix并复制文件到此文件夹
      • 进入文件夹导入redis镜像
      • 检查redis镜像
      • 创建数据卷
      • 查看数据卷对应的宿主机目录
      • 启动nginx服务
      • 访问nginx服务

镜像篇

下载镜像

docker pull 镜像名

docker pull hello-world

导入镜像文件

镜像导入(要在hello-world.tar.gz 文件所在目录下执行)

docker load < hello-world.tar.gz  

删除镜像文件

docker image rm hello-world

查看镜像

docker images

导出镜像文件

镜像导出(linux系统中的镜像文件下载到本地-例如window),导出后给他人使用

docker save  hello-world | gzip > hello-world.tar.gz  

运行镜像文件

基于镜像,启动容器运行。

docker run hello-world 

容器篇

容器是在镜像上使用的,要先得有镜像文件,才能启动!!,详细操作看镜像篇

查看容器

docker ps -a (all的简写)

启动容器

命令:docker run -it xxxx bash
1)xxxx - 镜像名, 或 image id 的前几位,
2)-it 这是两个参数(-i表示交互式操作, -t 表示终端)
3) bash 表示进入操作终端,基于交互式进行相关操作(例如执行linux相关指令)。
docker run -it centos:7 bash

Docker容器详细操作_第1张图片

进入(exec)指定容器

docker exec -it 802 bash #802为容器id

从容器(Container)中退出(exit)

exit

停止运行的容器

docker container stop 802  #802为容器自己的id

重新启动容器

docker container restart 802 #802位容器自己的id

删除容器

docker  (container) rm -f(强制删除)  9a1(容器的id)

清理所有处于终止状态容器

docker container prune

管理容器篇

在容器中管理数据主要有两种方式:
	数据卷(Volumes)
	挂载主机目录 (Bind mounts)

创建数据卷

docker volume create container-vol

查看所有数据卷

docker volume ls

查看指定 数据卷 的信息

docker volume inspect container-vol

启动挂载数据卷的容器

docker run -it --mount source=container-vol,target=/root centos:7 bash
  或
docker run -it -v container-vol:/root centos:7 bash
  说明:
-v container-vol:/root 把数据卷 container-vol 挂载到容器的 /root 目录

删除数据卷(如果数据卷被容器使用则无法删除)

docker volume rm container-vol

清理无主数据卷

docker volume prune

挂载主机目录

docker run -it -v /usr/app:/opt/app centos:7 bash
 说明:
1)/usr/app:为宿主机目录
2)/opt/app: 为启动容器的一个目录
3)-v 用于指定挂载目录,如果本地目录(宿主机目录)不存在, Docker 会自动为你按照挂载目录进行目录的创建。

查看挂载目录信息

docker inspect 91a #91a 为容器id

挂载在主机目录与挂载在数据卷的区别

挂载在主机目录:
	优点:目录由用户自己管理,比较灵活
	缺点:写入数据可能需要权限(假如用户没有给目录权限),需要重新赋权且目录的安全性比较低。
挂载在docker容器:
	优点:由容器管理,即使容器坏掉也对文件没有影响,且写入数据的目录比较深,相对挂载在主机目录较安全。

Docker镜像制作实践篇

制作JDK镜像

新建一个文件夹(jdk)

/root/setup/jdk 并将“jdk-8u51-linux-x64.tar.gz”文件拷贝到改目录下
Docker容器详细操作_第2张图片

创建Dockerfile文件

/root/setup/jdk/Dockerfile ,并复制一下代码到文件中

FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz /usr/local/docker
ENV JAVA_HOME=/usr/local/docker/jdk1.8.0_51 \
    PATH=/usr/local/docker/jdk1.8.0_51/bin:$PATH
CMD ['bash']

创建JDK镜像文件

在Dockerfile所在目录(即:/root/setup/jdk)执行docker build指令

docker build -t jdk:8 .  #不要丢掉这里的点,-t表示镜像标识(镜像名),是tag单词的缩写.

运行JDK镜像(image)文件

docker run -it jdk:8 bash  #不要丢掉这里的点,-t表示镜像标识(镜像名),是tag单词的缩写.

制作Sentinel镜像

新建一个文件夹(sentinel)

/root/setup/sentinel并将“jdk-8u51-linux-x64.tar.gz ,sentinel-dashboard-1.8.1.jar”两个文件拷贝到改目录下
Docker容器详细操作_第3张图片

创建Dockerfile文件

/root/setup/sentinel/Dockerfile ,并复制一下代码到文件中

FROM centos:7
ADD jdk-8u51-linux-x64.tar.gz  /usr/local/
ADD sentinel-dashboard-1.8.1.jar  /usr/local/
ENV JAVA_HOME=/usr/local/jdk1.8.0_51 \
    PATH=/usr/local/jdk1.8.0_51/bin:$PATH
EXPOSE 8080
ENTRYPOINT ["java","-jar","/usr/local/sentinel-dashboard-1.8.1.jar"]

其中,EXPOSE表示对外暴露的服务端口,ENTRYPOINT中写的是你容器启动时候要执行的指令.

创建JDK镜像文件

在Dockerfile所在目录(即:/root/setup/jdk)执行docker build指令

docker build -t  sentinel:8 .  #不要丢掉这里的点

后台运行sentinel容器

docker run -d --name sentinel8181 -p 8181:8080 sentinel:8  #-d 表示后台运行,-p用于指定端口映射,sentinel:8为镜像文件名

查看sentinel容器

docker ps

访问sentinel服务

http://192.168.126.128:8181/
Docker容器详细操作_第4张图片
访问不了原因分析:
1.IP地址和端口号是否写正确
2.docker容器所在的Linux操作系统的网关是否关闭,或者是否开放我们访问的端口
解决方法:

1)检查防火墙状态:
		firewall-cmd --state
2)通过命令手动将防火墙关闭:
    	systemctl stop firewalld.service
3)告诉linux系统以后开机不需要启动防火墙
   		systemctl disable firewalld.service
4)重启防火墙
   		firewall-cmd --reload
 想要更多详细操作,请参考:

镜像安装实践篇

安装MySql数据库

下载mysql镜像

在hub.docker.com上搜索

Docker容器详细操作_第5张图片

新建文件mysql并复制文件到此文件夹

/root/setup/mysql
Docker容器详细操作_第6张图片

进入文件夹导入mysql镜像

docker load < mysql.tar.gz

检查mysql镜像

docker images

启动运行mysql镜像(即启动一个容器)

sudo docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/mysql-files:/var/lib/mysql-files \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:8.0.23

mysql服务操作

进入容器 (退出容器用exit)

sudo docker exec -it mysql bash

新建mysql数据库文件并放入xx.mysql

/usr/local/docker/mysql/mysql-files:/var/lib/mysql-files
问号前部分:为宿主目录,后部分:docker容器目录

mkdir -p /usr/local/docker/mysql/mysql-files

Docker容器详细操作_第7张图片

启动mysql服务

docker start mysql

登陆(默认密码root)数据库

mysql -u root -p root

导入数据

启动mysql容器,进入数据库(若你退出了,请参考前几个步骤重新做一遍),最后导入xxx.mysql文件

source /var/lib/mysql-files/jt-sso.mysql

假如希望查看mysql启动时的日志,可以执行 docker container logs mysql 这个指令。

退出数据库

输入:exit+回车或按住快捷键Ctrl+C

停止mysql服务(可选)

docker stop mysql

设置mysql开机自启动(可选)

docker update mysql --restart=always

安装redis数据库

下载redis镜像

方法同MySQL一样

新建文件redis并复制文件到此文件夹

/root/setup/redis
Docker容器详细操作_第8张图片

进入文件夹导入redis镜像

docker load < redis.tar.gz

检查redis镜像

docker images

准备配置文件

创建redis配置文件目录

mkdir -p /usr/local/docker/redis01/conf

在配置文件录下创建redis.conf配置文件

这个文件一定要创建,否在我们进行目录挂载时默认生成的是一个目录

touch /usr/local/docker/redis01/conf/redis.conf

查看正在运行的进程

docker ps

访问redis服务器

控制台直接连接redis测试

docker exec -it redis01 bash

检测redis 版本

redis-server  -v

登录redis(默认不需要密码)

redis-cli

启动redis服务

docker start redis01

停止redis服务

docker stop redis01

重启 redis 服务(可选)

docker restart redis01

设置redis 开机自启动(可选)

docker update redis --restart=always

安装ngnix

下载ngnix镜像

方法同MySQL一样

新建文件ngnix并复制文件到此文件夹

/root/setup/ngnix
Docker容器详细操作_第9张图片

进入文件夹导入redis镜像

docker load < ngnix.tar.gz

检查redis镜像

docker images

创建数据卷

docker volume create nginx-vol

查看数据卷对应的宿主机目录

docker inspect nginx-vol

Docker容器详细操作_第10张图片

启动nginx服务

docker run --name nginx  -p 80:80 -v nginx-vol:/etc/nginx -d nginx

其中:/etc/nginx 为nginx容器启动时,nginx镜像文件默认的解压目录
说明:假如以后想修改nginx配置,可以直接去nginx-vol数据卷对应的目录去修改.

访问nginx服务

Docker容器详细操作_第11张图片

你可能感兴趣的:(微服务学习,docker,容器)