Docker容器详细操作
docker是一款解决环境问题的软件,具有打包方便,只需打包一次,其他人将打包好的文件拷贝来直接运行,而避免了软件版本不一致的困扰。
Docker操作
镜像篇
下载镜像
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
进入(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”文件拷贝到改目录下
创建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”两个文件拷贝到改目录下
创建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/
访问不了原因分析:
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上搜索
新建文件mysql并复制文件到此文件夹
/root/setup/mysql
进入文件夹导入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
启动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
进入文件夹导入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
进入文件夹导入redis镜像
docker load < ngnix.tar.gz
检查redis镜像
docker images
创建数据卷
docker volume create nginx-vol
查看数据卷对应的宿主机目录
docker inspect nginx-vol
启动nginx服务
docker run --name nginx -p 80:80 -v nginx-vol:/etc/nginx -d nginx
其中:/etc/nginx 为nginx容器启动时,nginx镜像文件默认的解压目录
说明:假如以后想修改nginx配置,可以直接去nginx-vol数据卷对应的目录去修改.
访问nginx服务
更多推荐
所有评论(0)