目录
修改格式,将commit打包的库,修改为符合私服库规范的tag
在/home/docker/nginx/www目录下创建index.html
在index.html随便写入内容,再访问 ip:8081/index.html
基础命令
开启docker : systemctl start docker
查看docker状态 :systemctl status docker
停止:systemctl stop docker
重启: systemctl restart docker
docker开机自启: systemctl enable docker
搜索镜像
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