- Dokcer使用及常见命令
- docker安装
- docker常见操作
- dockerfile使用
- 举例:docker镜像安装mysql实例
- 举例:MySQL、Redis、Nacos启动
docker安装
-
官网访问:https://docs.docker.com/engine/install/centos/
-
删除旧版:
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine -
安装准备环境,并添加docker下载地址
sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo -
安装docker-ce和docker-ce-cli
sudo yum install docker-ce docker-ce-cli containerd.io
-
启动docker
sudo systemctl start docker
注意:
-
如果使用docker run -d 命令,当只有后台进程,没有前台进程的时候,且后台进程中没有阻塞线程,相关命令运行完毕后,docker容器实例会自动关闭
-
docker attach只能进入容器终端,但是exec可以进入终端,也可以在容器外部执行命令
-
docker run -v hostpath:dockerpath 当host或vm的路径不存在时,会自动创建相应目录。同时,即便是容器关闭后,主机修改相应目录,当容器重启后,数据依然可以自动同步。
注:-v在挂载文件的时候,容易造成映射错误,提前给待操作目录授权chmod -R 777 dir## 帮助操作 # 查看docker版本 docker version # 查看docker信息 docker info # 查看docker帮助 docker --help ### 镜像操作(针对镜像dname) # 查看本地镜像信息 docker images -a ## 显示所有 -q ## 显示id --digests ## 摘要信息 --no-tunc ## 完整镜像信息 # 到dockerhub查询镜像 docker search dname # 拉取镜像 docker pull dname:latest # 删除镜像 docker rmi dname docker rmi -f dname ## 强制删除 docker rmi -f $(docker images -qa) ## 全部删除 # 根据现有实例生成新镜像 docker commit -a="author" -m="info" diname newdname:2.1 ### 实例操作(针对镜像创建的实例diname) ## 针对实例外部整体进行操作 # 创建实例并启动 sudo docker run -it ## 打开伪终端界面 --name diname -v hostpath:dockerpath ## 目录映射 -v hostpath:dockerpath:ro ## 目录映射+只读读权限控制(host可读写,但docker只读) -p hostport:dockerport ## 端口映射(P表示随机端口映射) -e MYSQL_ROOT_PASSWORD=root ## 改参数 -d ## 后台运行 dname ## 启动的镜像名 ls -l ## dockerrun后面还可以加cmd命令 # 启动容器 docker start diname # 重启实例 docker restart diname # 停止实例 docker stop diname docker kill diname ## 强制停止实例 # 更新实例参数(如设置开机自动启动) docker update --restart=always diname docker update --restart=no diname # 删除实例 docker rm diname docker ps -qa | xargs docker rm ## 删除所有 # 查看启动了哪些实例(-a所有) docker ps ## 显示正在运行的容器 docker ps -a ## 显示所有容器 # 查看日志 docker logs -t ## 带时间戳 -f ## 持续更新 --tail ## 打印最后XX条 diname ## 针对实例内部操作 # 进入docker bash docker attach diname docker exec -it diname docker exec -it diname /bin/bash ## 同上 # 在docker内部执行某个命令 docker exec -it diname ls -l /tmp # 启动redis docker exec -it redis redis-cli # 退出容器 exit ## 停止退出 ctrl + p + q ## 不停止退出 # 查看容器内部的进程 docker top diname # 查看容器内部细节 docker inspect diname # 从容器中把数据拷贝出来 docker cp diname:/dockerpath /rootpath
作用:用于组装出一个符合要求的docker镜像
-
dockerfile模板:
From centos ENV mypath /tmp WORKDIR $mypath RUN yum -y install vim RUN yum -y install net-tools # 生成镜像时,会将文件拷贝到/usr/local/目录中,并自动解压缩。 ADD a.tar.gz /usr/local # 被其他镜像继承时才会触发。 ONBUILD ["ls","-l"] EXPOSE 80 # ENTRYPOINT只有一个,会把CMD的命令作为参数。 # 如果在docker run阶段有新的命令,则会替代CMD命令作为ENTRYPOINT的参数 ENTRYPOINT ["ls","-l"] # CMD可以定义多条,但只有最后一条会被执行,且会被docker run后的命令替换 CMD ["/usr/local"] CMD /bin/bash
-
dockerfile构建:
docker build -f dockerfile -t dname
执行顺序会影响run的成功与失败
-
dockerhub查找
https://hub.docker.com/search?q=&type=image
-
pull images拉取
docker pull mysql:8.0.28
-
start images启动(docker run --name dname)
注:-v在挂载文件的时候,容易造成映射错误,提前给待操作目录授权chmod -R 777 dir
# 实例启动 sudo docker run --name mysql -v /usr/local/mysql/log:/var/log/mysql ## 日志映射 -v /usr/local/mysql/data:/var/lib/mysql ## 数据映射 -v /usr/local/mysql/conf:/etc/mysql ## 配置映射 -p 3306:3306 ## 端口映射 -e MYSQL_ROOT_PASSWORD=root ## 改参数 -d ## 后台运行 mysql:5.7 ## 启动的服务镜像名称
## mysql(-v的顺序不同,可能导致image启动失败,) #创建文件 mkdir -p /usr/local/mysql/log mkdir -p /usr/local/mysql/data mkdir -p /usr/local/mysql/conf #运行mysql sudo docker run --name mysql -v /usr/local/mysql/log:/var/log/mysql -v /usr/local/mysql/data:/var/lib/mysql -v /usr/local/mysql/conf:/etc/mysql/conf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:8.0.28 # 改密码 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root'; FLUSH PRIVILEGES; ## redis mkdir -p /usr/local/redis/conf/ touch /usr/local/redis/conf/redis.conf sudo docker run --name redis -v /usr/local/redis/data:/data -v /usr/local/redis/conf/redis.conf:/etc/redis/redis.conf -p 6379:6379 -d redis redis-server /etc/redis/redis.conf ## nacos docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server



