0 删除已停止的容器
docker rm $(docker ps -a | grep "Exited" | awk '{print $1 }') #删除容器
1 docker 安装
curl -sSL https://get.docker.com/ | sh
文档 https://developer.aliyun.com/article/110806
2 确认docker是否安装成功
docker version
2 配置阿里云 docker 镜像加速器
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
3 搜索镜像
docker search ubuntu
4 获取镜像
docker pull ubuntu:14.04
docker images #查看本地所有镜像
5 运行镜像,运行起来的镜像就叫做容器了,仔细看,你会发现终端交互的用户名变掉了,说明我们进入到了容器的内部。修改服务器的 时区,软件源等(参考https://segmentfault.com/a/1190000004352401)
docker run -it ubuntu:14.04 /bin/bash
6 现在我们所做的任何操作都是针对于目前容器而言的,不会影响到原来的系统,例如,我们在里面安装下nginx服务器,和正常系统一样使用,运行如下命令:
apt-get install nginx
ps:需要修改配置 daemon off;或则docker以守护进程运行会失败。
在生成mysql镜像的时候,需要在初始创建bash容器的时候就加上-v /data/mysql:/var/lib/myql选项(docker run -v /opt/dockerData/mysql:/var/lib/mysql -it 802bff3e28e6 /bin/bash)。个人理解是因为mysql产生数据需要映射。
7 退出容器
exit 或 ctrl+d
8 ps命令可以查看我们当前都运行了哪些容器,加上-a参数后就表示运行过哪些容器,因为我们刚刚已经退出了安装nginx的容器,因此我现在想查看它的话,需要使用-a参数,执行如下命令
docker ps -a
8.1 进入已停止的容器
docker start 容器id
docker attach 容器id
NOTE 进入之后可能需要CTRL+C一下
9 commit命令用来将容器转化为镜像,运行下面的命令,我们可以讲刚刚的容器转换为像,()
docker commit -m "add nginx" -a "hufeng" c012b109b24a hufeng/nginx:v1
其中,-m参数用来来指定提交的说明信息;-a可以指定用户信息的;c012b109b24a 代表的是容器的id;hufeng/nginx:v1指定目标镜像的用户名、仓库名和 tag 信息。创建成功后会返回这个镜像的 ID 信息 。
10 停止容器
docker stop 4696891a2388
10.1 清除所有停止的docker容器
docker rm $(docker ps -a -q)
11 强制删除镜像
docker rmi -f 691cd86f9ff1
12 将宿主机的端口和目录绑定到docker虚拟机
-d 以守护进程运行
-p 绑定的端口
-v 绑定的目录
docker run -d -p 9010:9000 -v /www:/www a7322cfb6259
docker run -d -p 8090:80 -v /www:/usr/share/nginx/html d53bfcc6255e
docker run -d -p 8090:80 -p 3222:22 -v /www:/usr/share/nginx/html d53bfcc6255e /user/sbin/sshd -D
#docker run -d -p 8400:3306 testmysql mysqld_safe
docker run -d -p 8301:3306 -v /opt/dockerData/mysql:/var/lib/mysql efa2dae55c8b mysqld
13 copy docker中文件到宿主机
docker cp 容器id:/etc/nginx/nginx.conf /root/nginx/conf
https://blog.csdn.net/m0_67392010/article/details/126801709
14 nginx docker 使用
参考:https://blog.csdn.net/m0_67392010/article/details/126801709
将容器配置文件copy到本地:docker cp 容器id:/etc/nginx/nginx.conf /root/nginx/conf
建立好目录映射后运行:docker run -d -p 8510:80 -v /var/docker/nginx/nginx.conf:/etc/nginx/nginx.conf -v /var/docker/nginx/:/var/docker/nginx/ -v /var/www/:/var/www/ nginx 注意修改nginx.conf文件中的目录
这样就非常方便在宿主机中修改配置了。
重启容器:docker restart 容器id
停止容器:docker stop 容器id
启动容器:docker start 容器id
15 redis docker使用
docker run -d -p 8511:6379 -v /var/docker/redis/redis.conf:/etc/redis/redis.conf -v /var/docker/redis/data:/data redis redis-server /etc/redis/redis.conf
注意:-v /var/docker/redis/data:/data 虚拟机的目录要存在才行。
redis.conf配置参考
port 6379
requirepass hufeng9
dir /data
tcp-backlog 511
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
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
15 docker mysql操作
docker run -d -p 8512:3306 -v /var/docker/mysql/log:/var/log/mysql -v /var/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=hufeng9 mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
宿主机目录建好映射过去就可以了
16 docker php hyperf操作
运行容器:
docker run -d --name hyperf -v /var/docker/www/:/var/www -p 8513:9501 -it --privileged -u root --entrypoint /bin/sh hyperf/hyperf:7.4-alpine-v3.14-swoole-v4
进入容器:docker exec -it 容器id /bin/bash
容器中执行 php bin/hyperf.php start
注意:要修改数据库的连接IP
查看宿主机或者容器的IP: ifconfig 命令 docker0中的intet
17 dockerFile使用例子
参考文档:https://blog.csdn.net/weixin_44593822/article/details/127359647
Dockerfile文件内容如下:
FROM hyperf/hyperf:7.4-alpine-v3.14-swoole-v4
MAINTAINER 作者
WORKDIR /var/www #自动切换到工作目录
VOLUME ["/var/docker/www", "/var/www"] #映射
执行构建镜像命令:docker build .
构建出来的镜像名字是none,重新打tag:docker tag 镜像id hyperf_hf