1

docker的使用笔记
0 docker的生命周期

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


hufeng
291 声望21 粉丝