docker 命令大全

  • Post author:
  • Post category:其他



目录


基础命令


搜索镜像


下拉镜像


显示镜像列表


删除未使用镜像


修改tag


删除镜像


启动容器


查看容器


进入容器


退出容器


暂停容器


删除容器


重启重启


关闭容器a: docker stop a启动容器a :docker start a删除容器 : docker rm ID查看容器信息 : docker inspect a查看进程  docker top a


杀掉一个正在运行的容器


镜像打包为文件


文件载入镜像


从容器中拷贝出来 :


导出容器 保存为文件


文件导入镜像


将容器打包成一个新的镜像


本地镜像发布到阿里云


使用  docker registry 构建私有仓库


运行 registry


下载centos


在容器中安装ifconfig命令


将打包的镜像运行


检测 registry 私服库是否可用


修改格式,将commit打包的库,修改为符合私服库规范的tag


修改配置文件,让docker以http方式推送


重启docker


再次启动registry 私服库


再push推送私服库


再次curl验证私服库上有什么镜像


再pull registry库中的镜像


docker 数据卷


查看数据卷


目录映射


数据卷继承


nginx 安装


下载nginx


启动nginx


创建挂载目录


复制文件到宿主机


删除容器nginx1


重新启动新容器nginx


在/home/docker/nginx/www目录下创建index.html


在index.html随便写入内容,再访问  ip:8081/index.html


mysql安装


下载


使用navicat连接mysql


docker 安装redis


redis.conf


说明:


docker 网络模式


网络命令


三种网络模式


docker 使用自定义网络


基础命令


开启docker :

systemctl start docker


查看docker状态 :

systemctl status docker


停止:

systemctl stop docker


重启:

systemctl  restart docker


docker开机自启:

systemctl enable docker


Docker Hub

搜索镜像

docker search centos       

下拉镜像

docker pull nginx:1.23

下拉nginx 指定版本1.23,不指定版本默认拉取最新版本

显示镜像列表

docker images

删除未使用镜像

docker image prune

修改tag


修改前

修改后



docker image tag b692a91e4e15 ng:11   (根据容器ID修改)



(docker tag nginx:v1  ng:1.23)  可以省略image  【

根据容器名与版本号修改





会出现两个ID一样的镜像,并且rmi删除还报错



解决1  根据name和tag删除



删除后nginx不见了只有ng


删除镜像

docker rmi ID


rmi 删除 镜像


rm 删除容器


删除所有镜像: docker rmi -f $(docker images -qa)

启动容器

docker run -it --name=aa  redis:5.6 /bin/bash      
docker run -it b692a91e4e15 /bin/bash
i:一直运行
d:后台运行
t:分配一个终端
-P 随机分配端口
-m 限制内存
--cpus 限制cpu个数
--name 给容器一个名称 aa
启动redis 容器 5.6 这个版本


查看容器


docker ps   查看



正在运行



容器列表


docker ps -qa 查看所有

容器ID


-q 显示ID  -a

所有容器

进入容器

docker exec -it redis /bin/bash
docker exec -it b692a91e4e15 /bin/bash

退出容器



如果是exec 进入容器  exit 可以退出 并且容器不会停止



如果是启动时进入的容器 ctrl+p + q  退出,并且容器不会停止,如果同exit 退出 容器会停止运行

暂停容器

docker stop id
docker stop name:tag

删除容器

docker rm id

重启重启

 docker restart 026e
 docker restart name:tag


关闭容器a:

docker stop a


启动容器a :


docker start a



删除容器 :

docker rm ID


查看容器信息 :

docker inspect a


查看进程

docker top a


杀掉一个正在运行的容器

docker kill 026e

镜像打包为文件

docker image save id号 -o name(名称:redis5.tar)  打包tar

文件载入镜像

docker image load -i redis5.0.tar  将tar包 导入

从容器中拷贝出来 :

 docker cp web10:/etc/nginx/nginx.conf  /root/data/web10

导出容器 保存为文件

docker export -o centos.tar bf4b4afa07e3 

-o 导出地址以及文件名

文件导入镜像

docker import centos.tar centos:test

将容器打包成一个新的镜像


-m 描述  -a 作者

xuzhi/centos_vim:vim-test   name:tag

docker commit -m="add vim success" -a="xuzhi" bf4b4afa07e3 xuzhi/centos_vim:vim-test

本地镜像发布到阿里云

登录阿里云 —》  容器镜像服务 —-》 个人实例

1.创建命名空间(公开的)

2.镜像仓库

3.推送

4.拉取


使用  docker registry 构建私有仓库


下载镜像,用于搭建私有库:docker  pull registry

运行 registry


docker run -d -p 8085:5000 -v /home/docker/registry/:/tmp/registry –privileged=true registry



privileged=true|false



true





container内的root拥有真正的root权限。





false




container内的root只是外部的一个普通用户权限。


默认false


privileged启动的容器



可以看到很多host上的设备



可以执行mount。



可以在docker容器中启动docker容器。

下载centos



docker pull centos


运行centos



docker run -it –name registry-centos fef3c6abc4fc /bin/bash

在容器中安装ifconfig命令



yum list ifconfig


将容器打包为一个新的镜像



docker commit -m=”vim /root/1.txt ifconfig” -a=”registry-xuzhi” 27d54afbb753 registry-commit-centos:centos-ifconfig


将打包的镜像运行



docker run -it –name=run_registry_commit_centos c98b9a896fa0 /bin/bash

ifconfig 命令还是可以使用


检测 registry 私服库是否可用



curl -XGET http://39.103.229.69:8085/v2/_catalog




使用8085端口是因为运行 registry 设置-p 8085:5000

本地私服库为空

修改格式,将commit打包的库,修改为符合私服库规范的tag



docker tag c98b9a896fa0 39.103.229.69:8085/registry_centos:1.0



规范    ip:prot /name : version


修改配置文件,让docker以http方式推送


修改配置文件使之支持http

vim命令新增如下加粗内容:(别忘了逗号)



vim /etc/docker/daemon.json



registry-mirrors : docker 加速cdn



insecure-registries : 支持http

{
  "registry-mirrors": ["https://aa25jngu.mirror.aliyuncs.com"],
  "insecure-registries": ["192.168.111.162:5000"]
}

重启docker

systemctl restart docker

再次启动registry 私服库

docker run -d -p 8085:5000 -v /home/docker/registry/:/tmp/registry --privileged=true registry


再push推送私服库

docker push 39.103.229.69:8085/registry_centos:1.0

再次curl验证私服库上有什么镜像



curl -XGET http://39.103.***.69:8085/v2/_catalog


删除之前打包的镜像

​​​​​​​docker rmi 39.103.229.69:8085/registry_centos:1.0

再pull registry库中的镜像



docker pull 39.103.229.69:8085/registry_centos:1.0

docker 数据卷



–privileged=true    使

container

内的root拥有真正的root权限



-v 目录映射

宿主机不存在的目录可以自动创建





如果宿主机的目录存在并且有文件,会直接覆盖容器目录中的文件


docker run -it --privileged=true -v /宿主机目录(绝对路径):/容器目录  镜像ID /bin/bash

查看数据卷

docker inspect ID

目录映射

普通的挂在数据: -v




宿主机不存在的目录可以自动创建



-v 参数会把当前系统的文件目录/home/test,挂在到创建的容器目录/usr/share/nginx/html上

docker run -it --name=nginx -p 8081:80 -v /home/test:/usr/share/nginx/html -d 605c77e624dd


数据卷继承

docker run -it --name=n2 -p 8084:80 --volumes-from nginx  -d 605c77e624dd



当前容器继承 上面的nginx容器,两个容器是相互独立的,nginx容器关闭不会影响当前容器

nginx 安装

下载nginx

docker pull nginx:1.23

启动nginx

docker run -p 8081:80 --name nginx1 -d nginx:1.23

创建挂载目录

# 创建挂载目录
mkdir -p /home/docker/nginx/conf
mkdir -p /home/docker/nginx/log
mkdir -p /home/docker/nginx/html

复制文件到宿主机

docker cp nginx1:/etc/nginx/nginx.conf /home/docker/nginx/conf/nginx.conf

docker cp nginx1:/etc/nginx/conf.d  /home/docker/nginx/conf/conf.d

docker cp nginx1:/usr/share/nginx/html /home/docker/nginx/www

删除容器nginx1

docker rm -f nginx1

重新启动新容器nginx

docker run \
-p 8081:80 \
--name nginx \
-v  /home/docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /home/docker/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /home/docker/nginx/logs:/var/log/nginx \
-v /home/docker/nginx/www:/usr/share/nginx/html \
-d nginx:1.23

在/home/docker/nginx/www目录下创建index.html


在index.html随便写入内容,再访问  ip:8081/index.html

mysql安装

下载

docker pull mysql:5.7
docker run -d -p 8086:3306 --name mysql5.7  -v /home/docker/mysql/log:/var/log/mysql  -v /home/docker/mysql/data:/var/lib/mysql  -v /home/docker/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root   mysql:5.7


上述命令的含义:

docker run:在docker中启动一个容器实例

-d:该容器在后台运行

-p 3306:3306:容器与主机映射端口为,主机3306,容器3306

–name mysql:容器运行后的名称

-v /mysqldata/mysql/log:/var/log/mysql:将容器/var/log/mysql目录下的数据,备份到主机的 /mysqldata/mysql/log目录下

-v /mysqldata/mysql/data:/var/lib/mysql:将容器/var/lib/mysql目录下的数据,备份到主机的 /mysqldata/mysql/data目录下

-v /mysqldata/mysql/conf:/etc/mysql:将容器/etc/mysql目录下的数据,备份到主机的 mysqldata/mysql/conf目录下

-e MYSQL_ROOT_PASSWORD=root:设置当前mysql实例的密码为root

mysql:5.7:需要运行的容器名称以及版本号


切换到 /home/docker/mysql/conf 下

在这里插入图片描述

cd /home/docker/mysql/conf
touch my.cnf



使用


vim


命令对


my.cnf


文件添加如下内容,在docker中安装的mysql默认字符集是


latin1

,

需要改成


utf8


[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
docker restart  mysql



使用


navicat


连接


mysql






​​​​​​​


docker 安装redis

docker pull redis:6.0.8





docker run


之前,先将redis.conf 拷贝到


/home/docker/redis


目录下




/home/docker/redis 是自己的配置目录,可以自定义



redis.conf

# bind 192.168.1.100 10.0.0.1
# bind 127.0.0.1 ::1
#bind 127.0.0.1

protected-mode no

port 6379

tcp-backlog 511

#requirepass 654321

timeout 0

tcp-keepalive 300

daemonize no

supervised no

pidfile /var/run/redis_6379.pid

loglevel notice

logfile ""

databases 30

always-show-logo yes

save 900 1
save 300 10
save 60 10000

stop-writes-on-bgsave-error yes

rdbcompression yes

rdbchecksum yes

dbfilename dump.rdb

dir ./

replica-serve-stale-data yes

replica-read-only yes

repl-diskless-sync no

repl-disable-tcp-nodelay no

replica-priority 100

lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush no

appendonly yes

appendfilename "appendonly.aof"

no-appendfsync-on-rewrite no

auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb

aof-load-truncated yes

aof-use-rdb-preamble yes

lua-time-limit 5000

slowlog-max-len 128

notify-keyspace-events ""

hash-max-ziplist-entries 512
hash-max-ziplist-value 64

list-max-ziplist-size -2

list-compress-depth 0

set-max-intset-entries 512

zset-max-ziplist-entries 128
zset-max-ziplist-value 64

hll-sparse-max-bytes 3000

stream-node-max-bytes 4096
stream-node-max-entries 100

activerehashing yes

hz 10

dynamic-hz yes

aof-rewrite-incremental-fsync yes

rdb-save-incremental-fsync yes

docker run --restart=always -p 8087:6379 --name redis1 --privileged=true -v /home/docker/redis/redis.conf:/etc/redis/redis.conf -v /home/docker/redis/data:/data -d redis:6.0.8 redis-server /etc/redis/redis.conf --requirepass 123456

说明:



–restart=always

总是开机启动 【

加上此参数重启docker后,redis会自动启动




–privileged=true

docker 以root用户运行

–log是日志方面的

-p 6379:6379 将6379端口挂载出去

–name 给这个容器取一个名字

-v 数据卷挂载

/home/redis/myredis/myredis.conf:/etc/redis/redis.conf 这里是将 liunx 路径下的myredis.conf 和redis下的redis.conf 挂载在一起。

/home/redis/myredis/data:/data 这个同上

-d redis 表示后台启动redis


redis-server

/etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录 /etc/redis/redis.conf 也就是liunx下的/home/redis/myredis/myredis.conf

–appendonly yes 开启redis 持久化

–requirepass 000415 设置密码 (如果你是通过docker 容器内部连接的话,就随意,可设可不设。但是如果想向外开放的话,一定要设置,我被搞过,可以看这篇文章“阿里云服务器中毒‘Kirito666’经历”)



php测试连接

<?php
$redis = new Redis(); //创建一个对象
$redis->connect('192.168.255.166',8089); //连接redis
$redis->auth("123456");
$redis->select(0); //选择数据库(默认16个数据库,0-15,这个值可以在配置文件修改。)
$redis->set('a1', 'hahah'); //往redis写入一条记录
echo $redis->get('a1'); //从redis中读取一条记录

docker 网络模式


网络命令


connect

将某个容器连接到一个docker网络


create

创建一个docker局域网络


disconnect

将某个容器退出某个局域网络


inspect

显示某个局域网络信息


ls

显示所有docker局域网络


prune

删除所有未引用的docker局域网络


rm

删除docker网络



​​​​​​​

三种网络模式


bridge




桥接模式 |


为每个容器分配设置IP,并将容器连接到docker0 虚拟网卡上


host




主机模式 |




容器使用宿主机的ip和端口


none




无网络模式 |





容器有独立的网络,并没有对给网络分配端口和ip



docker 使用自定义网络


1.创建网络


docker network create a_network


2.新建容器加入自定义网络


docker run -d -p 8081:8080 –network a_network –name centos1 centos:7 /bin/bash



版权声明:本文为qq_43035350原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。