docker 安装及日常使用命令手册

Docker 官网介绍
https://docs.docker.com/

1. 基础环境Alpine
https://alpinelinux.org/downloads/
参考:alpine linux ,Small. Simple. Secure.
为啥选 alpine? 轻量级,快速,安全
体积小,速度快,这是重点
下表是官方镜像的大小比较:

REPOSITORY TAG IMAGE ID VIRTUAL SIZE
alpine latest 4e38e38c8ce0 4.799 MB
debian latest 4d6ce913b130 84.98 MB
ubuntu latest b39b81afc8ca 188.3 MB
centos latest 8efe422e6104 210 MB

2. 在Alpine 中安装Docker
取消第三行 community 源注释
vi /etc/apk/repositories

#/media/cdrom/apks
http://mirrors.sjtug.sjtu.edu.cn/alpine/v3.14/main
http://mirrors.sjtug.sjtu.edu.cn/alpine/v3.14/community
#http://mirrors.sjtug.sjtu.edu.cn/alpine/edge/main
#http://mirrors.sjtug.sjtu.edu.cn/alpine/edge/community
#http://mirrors.sjtug.sjtu.edu.cn/alpine/edge/testing
#参考更新镜像源
sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories
sed -i 's/mirrors.sjtug.sjtu.edu.cn/mirrors.ustc.edu.cn/g' /etc/apk/repositories

安装并设置docker服务默认启动

apk update
apk add docker
rc-update add docker boot
service docker start
docker version

 

3. 优化docker
国内的 Docker Hub 镜像加速器
参考 https://gist.github.com/y0ngb1n/7e8f16af3242c7815e7ca2f0833d3ea6
参考 https://docs.docker.com/registry/recipes/mirror/
http://mirrors.ustc.edu.cn/help/dockerhub.html
docker config ls
docker info

创建或更新 /etc/docker/daemon.json

{
  "registry-mirrors": [
    "https://hub-mirror.c.163.com",
    "https://mirror.baidubce.com"
  ]
}

重启 docker 服务
service docker restart
再查看下配置

docker config ls
docker info

看到最后出来

 Registry Mirrors:
  https://hub-mirror.c.163.com/
  https://mirror.baidubce.com/

============
官方镜像搜索,https://hub.docker.com/
docker web ui 管理

# portainer, 多一些管理功能,首次使用设置初始密码,然后选择Local 即可
docker run -d -p 9001:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name docker-prtainer portainer/portainer

# docker-ui 这个没有访问限制,建议限于本地开发使用,http://{对应IP地址}:9002 即可打开(可选参考)
docker run -d -p 9002:9000 –restart=always -v /var/run/docker.sock:/var/run/docker.sock –name docker-web docker.io/uifd/ui-for-docker

============
#常用命令
# 停止所有容器
docker stop $(docker ps -aq)

#查询运行中容器
docker ps

# 设置自动启动
docker update –restart=always xxx-name
docker update –restart=on-failure:10 xxx-name

#因为容器的ID是随机码,而容器的名字又是看似无意义的命名,我们可以使用命令
docker rename old_name new_name

#给这个容器命名。这样以后,我们再次启动或停止容器时,就可以直接使用这个名字。
docker [stop] [start] new_name

#而要显示出所有容器,包括没有启动的,可以使用命令
docker ps -a

#++++++++++++++++++++++++++
docker 启动后进入交互终端
方法A

docker exec -it CONTAINER_ID bash 
游戏
docker exec -it CONTAINER_ID bash 

方法B: docker attach ()

docker attach [OPTIONS] CONTAINER_ID

# 这个方式需要注意退出时用 Ctrl+z 会导致 docker 进程关闭退出
# 可以使用 Ctrl+q,Ctrl,p  退出不结束(连续按Ctrl+q和Ctrl+p)

#++++++++++++++++++++++++++
#修改容器映射端口
1、停止容器(docker stop xxxxxxxxx )
2、停止docker服务(systemctl stop docker)
3、修改这个容器的hostconfig.json文件中的端口(/var/lib/docker/containers/xxxxxxxxx 目录下相关文件 ,比如config.v2.json )
4、启动docker服务(systemctl start docker)
5、启动容器(docker start xxxxxxxxx )

cd /var/lib/docker/containers/xxxxxxxxx
#这里是CONTAINER ID
vim hostconfig.json
如果之前没有端口映射, 应该有这样的一段:
“PortBindings”:{}
增加一个映射, 这样写:
“PortBindings”:{“8080/tcp”:[{“HostIp”:””,”HostPort”:”60000″}]}
前一个数字是容器端口, 后一个是宿主机端口。将宿主机的60000端口映射到容器的8080端口
而修改现有端口映射更简单, 把端口号改掉就行。
注:我原来的容器中只有22的对外访问,现在想在容器中部署一个springboot项目,端口为8091,则修改如下:
“PortBindings”:{“22/tcp”:[{“HostIp”:””,”HostPort”:”10022″}],”8091/tcp”:[{“HostIp”:””,”HostPort”:”8000″}]}

#方法B
1、获得容器IP,将container_name 换成实际环境中的容器名
docker inspect container_name_xxxxxxxxx | grep IPAddress
2、iptable转发端口
将宿主机的60000端口映射到容器的8080端口
iptables -t nat -A DOCKER -p tcp –dport 60000 -j DNAT –to-destination 172.17.0.2:8080

#方法C
#先停止容器
docker stop containerA
#将容器commit成为一个镜像
docker commit containerA newImageB
#运行容器
docker run -p 8080:8080 -p 8081:8081 -v /home/data/:/home/data/ -dt newImageB

参考:
https://www.runoob.com/docker/debian-docker-install.html
Debian 安装 Docker

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
curl -sSL https://get.daocloud.io/docker | sh
apt-get update
apt-get install docker-ce docker-ce-cli containerd.io