Bootstrap

docker 命令大全

目录

 基础命令

搜索镜像

 下拉镜像

显示镜像列表

删除未使用镜像

修改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

;