docker 最佳实践
Docker
Docker镜像
搜索
cocker search ubuntu
拉取
docker pull ubuntu
运行
docker run -it –name ubuntu-test ubuntu /bin/bash
后台运行
docker run -itd ubuntu /bin/bash
参数:
-i: 交互式操作。
-t: 终端。
-d: 参数默认不会进入容器,想要进入容器需要使用指令 docker exec
ubuntu: ubuntu 镜像。
/bin/bash:放在镜像名后的是命令,这里是交互式 Shell /bin/bash。
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
docker attach <容器 ID>
or
docker exec -it <容器 ID> /bin/bash # 此命令会退出容器终端,但不会导致容器的停止
Docker容器
退出容器
Ctrl + P + Q # 不停止运行
exit # 会停止运行
查看所有的容器
docker ps -a
删除容器
docker rm -f <容器 ID>
停止容器
docker stop <容器 ID>
启动一个已停止的容器
docker start <容器 ID>
Docker网络
Docker的网络主要用于连接几个有关联的容器同时隔离不相关的。
Docker的网络可以分为下面4种:
bridge 桥接(默认)
通过 IP 或 用户自定义网络访问
host 容器与宿主机共享网络
none 禁用网络
用户自定义网络
Docker 网络相关的命令
1 | docker network ls |
Docker卷
Docker数据主要分为两类,持久化的与非持久化的。
持久化数据是需要保存到属主机磁盘上的数据。例如数据库数据。非持久化数据是不需要保存的那些数据。
每个Docker容器都有自己的非持久化存储。非持久化存储自动创建,从属于容器,生命周期与容器相同。这意味着删除容器也会删除全部非持久化数据。
如果希望自己的容器数据保留下来(持久化),则需要将数据存储在卷上。
每个容器都被自动分配了本地存储:
在Linux系统中,该存储的目录在/var/lib/docker/
在Windows系统中位于C\ProgramData\Docker\windowsfilter\ 目录之下。
Docker 卷相关的命令
1 | docker volume create <卷名> |
普通用户使用 Docker
普通用户使用docker命令需要加上sudo,原因是:
Docker的守护线程绑定的是unix socket,而不是TCP端口,这个套接字默认属于root,其他用户可以通过sudo去访问这个套接字文件。
所以docker服务进程都是以root账户运行。
解决的方式是:
创建docker用户组,把应用用户加入到docker用户组里面。只要docker组里的用户都可以直接执行docker命令。
可以先通过指令查看是否有用户组:
1 | cat /etc/group | grep docker |
如果有就跳过第一步!
第一步:创建docker用户组
1 | sudo groupadd docker |
第二步:将用户加入到用户组
1 | sudo usermod -aG docker $USER |
第三步:检查是否有效
1 | cat /etc/group |
第四步:重启docker-daemon
1 | sudo systemctl restart docker |
第五步:给docker.sock添加权限
1 | sudo chmod a+rw /var/run/docker.sock |