docker常用命令
1、帮助启动类命令
启动docker: systemctl start docker
停止docker: systemctl stop docker
重启docker: systemctl restart docker
查看docker状态: systemctl status docker
开机启动:systemctl enable docker
查看概要信息:docker info
查看帮助文档:docker --help
查看命令帮助文档 docker 具体命令 --help
2、镜像命令
查看有哪些镜像:docker images
,options:-a(列出所有镜像) -q(只显示镜像id)
搜索某个镜像:docker search xxx
,option:–limit n(只列出n个镜像,例:docker search --limit 5 redis
)
下载镜像:docker pull xxx
,option: xxx:tag(xxx镜像的版本号,不加:tag默认最新,例:docker pull redis:6.0.8
)
查看镜像/容器/数据卷所占的空间:docker system df
删除镜像:docker rmi 镜像id或名字(可以是多个,空格隔开)
,option:(-f:强制删除 docker rmi -f xxx
)
删除全部镜像:docker rmi -f $(docker images -qa)
题外 :虚悬镜像,名称和id都为< none >的无用镜像
3、容器命令
(1)新建+启动容器:docker run [option] IMAGE [COMMAND] [ARG....]
- options:
–name=容器新名字 (注意前边是两个“-”)
-d:后台运行容器斌返回容器ID,也叫启动守护式容器(后台运行);
-i :以交互模式运行容器,通常与 -t 同时使用;
-t :为容器重新分配一个伪输入终端 ,通常与 -i 同时使用;
-P:随机端口映射;
-p:指定端口映射;- 例
(2)查看正在运行的容器:docker ps
- options:
-a : 列出正在运行和历史上运行过的容器
-l : 显示最近创建的容器
-n : 显示最近n个创建的容器
-q : 静默显示,只显示容器编号
(3)退出容器:exit
,退出后容器停止;ctrl+p+q
,退出后容器不停止
(4)启动已经停止的容器 :docker start 容器id或名字
(5)重启容器:docker restart 容器id或名字
(6)停止容器:docker stop 容器id或名字
(7)强制停止容器:docker kill 容器id或名字
(8)删除已停止容器:docker rm 容器id或名字
,批量强制删除:docker rm -f $(docker ps -a -q)
(9)重点
- 启动前台交互式容器:
docker run -it redis
- 启动后台守护式容器:
docker run -d redis
注意:有些容器是不支持后台守护式启动的,如ubuntu、centos- 查看容器日志:
docker logs 容器id或名字
- 查看容器内运行进程:
docker top 容器id
- 查看容器内部细节:
docker inspect 容器id
重新进入正在运行的后台守护式容器:
docker exec -it 容器id
和docker attach 容器id
注意:上述两者的区别,attach 直接进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器停止,exec是在新的终端进程中打开容器,exit不会导致容器停止
- 容器中的文件拷贝:
docker cp [容器id]:[容器内文件的路径] [目的主机的路径]
例子:将myu1中/tmp/a.txt 拷贝到当前主机的/root/tmp下并重命名为my.txt
- 将整个镜像导入和导出
导出:docker export 容器id > 文件名.tar
导入:cat 文件名.tar | docker import - 包名/镜像名:版本号
小结:常用命令就这些,简单的命令没有给试例,例子中手残敲了些错命令注意甄别一下。
docker的使用
1、创建自己的镜像库,并提交自建镜像上去
(1) 下载registry容器:
docker pull registry
(2)运行(重点:运行时指定端口映射)
docker run -d -p 5000:5000 -v /zzyyuse/myregistry/:/tmp/registry --privileged=true registry
(3)将自定义的容器镜像commit
docker commit -m="提交说明" -a="作者名称" 自定义容器的id 容器的名称:版本号
(4)先验证本地的镜像库中有没有镜像
curl -XGET http://本地ip:registry端口号/v2/_catalog
(
(5)用tag命令将自定义镜像修改为符合私服规范的tag
docker tag 容器名称或id:版本号 私服的ip:端口号/镜像新名称:新的版本号
(6)由于本地registry默认不支持http推送,所以要修改配置配置文件
cat /etc/docker/daemon.json
vim /etc/docker/daemon.json
按insert 键输入,在配置文件中加入"insecure-registries": ["ip:端口号"]
,注意json格式,需要在上一条配置的尾部加“,”号,然后:wq保存,
``
重启docker:systemctl restart docker
(7)将自定义的镜像push到私服库
docker push 192.168.205.130:5000/rootubuntu:1.1
(8)验证有没有镜像
curl -XGET http://本地ip:registry端口号/v2/_catalog
(9)将本地的镜像删掉,从本地镜像库中重新pull,并运行验证
docker pull 192.168.205.130:5000/rootubuntu:1.1
2、容器数据卷
用途:完成数据持久化和重要数据备份
特点:
(1)使用
docker run -it --privileged=true -v /tmp/host_data:/容器内的目录:权限 --name 新名称 镜像名
权限默认可读写:rw,只读:ro
(2)卷的继承和共享
docker run -it --privileged=true --volumes-from 父类 --name 新名称 镜像名
docker中常用软件的安装
因为docker run会自动pull本地没有的镜像,所以不需要手动pull
(1)安装免修改的tomcat8
docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
(2)安装mysql
- 普通安装启动:
docker run -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0
- 数据卷备份启动:
docker run -d -p 3306:3306 --privileged=true -v /zzyyuse/mysql/log:/var/log/mysql -v /zzyyuse/mysql/data:/var/lib/mysql -v /zzyyuse/mysql/config:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name testmysql mysql:8.0
其中“/zzyyuse/mysql/xxx”为本地的备份目录 - 解决mysql中文乱码导致的插入失败:
因为使用数据卷启动了mysql,所以直接在本地的/zzyyuse/mysql/config
目录下新建my.cnf 并添加配置,这样配置也会同步到容器中的mysql中:
[client]
default_character_set=utf8
[mysqld]
collation_server=utf8_general_ci
character_set_server=utf8
添加配置后重启容器
(3)安装Redis
- 普通安装启动
docker run -d -p 6379:6379 redis:6.0.8
- 数据卷备份启动
首先要在/app/redis目录下新建自己的redis.conf,在里边加入默认出厂的原始redis.conf,然后和容器里的配置文件绑定,之后可以通过修改宿主机中的配置从而配置容器中的redis。
docker run -d --privileged=true -p 6379:6379 -v /app/redis/redis.conf:/etc/redis/redis.conf -v /app/redis/data:/data --name myredis redis:6.0.8 redis-server /etc/redis/redis.conf
注意:这里有问题,看某硅谷视频,在 /app/redis下新建redis.conf,redis.conf中daemonize已经设置为no了还是启动不了,以后找大佬给看看