Docker常用命令
一个CTFer的小窝

Docker常用命令

W1lsp0
2023-02-16 / 0 评论 / 56 阅读 / 正在检测是否收录...

1. 首先需要容器镜像加速,使用阿里云的个人链接

sudo vim /etc/docker/daemon.json
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://ayxukj4g.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker

apt-get remove docker docker-engine docker.io containerd runc
curl -fsSL https://test.docker.com -o test-docker.sh && sh test-docker.sh

2.容器操作

Docker创建命令-run

docker create
docker run
Usage: docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  -a, --attach=[]            登录容器(以docker run -d启动的容器)
  -c, --cpu-shares=0         设置容器CPU权重,在CPU共享场景使用
  --cap-add=[]               添加权限,权限清单详见:http://linux.die.net/man/7/capabilities
  --cap-drop=[]              删除权限,权限清单详见:http://linux.die.net/man/7/capabilities
  --cidfile=""               运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
  --cpuset=""                设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
  -d, --detach=false         指定容器运行于前台还是后台 
  --device=[]                添加主机设备给容器,相当于设备直通
  --dns=[]                   指定容器的dns服务器
  --dns-search=[]            指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
  -e, --env=[]               指定环境变量,容器中可以使用该环境变量
  --entrypoint=""            覆盖image的入口点
  --env-file=[]              指定环境变量文件,文件格式为每行一个环境变量
  --expose=[]                指定容器暴露的端口,即修改镜像的暴露端口
  -h, --hostname=""          指定容器的主机名
  -i, --interactive=false    打开STDIN,用于控制台交互
  --link=[]                  指定容器间的关联,使用其他容器的IP、env等信息
  --lxc-conf=[]              指定容器的配置文件,只有在指定--exec-driver=lxc时使用
  -m, --memory=""            指定容器的内存上限
  --name=""                  指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
  --net="bridge"             容器网络设置,待详述
  -P, --publish-all=false    指定容器暴露的端口,待详述 内部端口随机映射到主机的高端口
  -p, --publish=[]           指定容器暴露的端口,待详述 内部端口绑定到指定的主机端口
  --privileged=false         指定容器是否为特权容器,特权容器拥有所有的capabilities
  --restart=""               指定容器停止后的重启策略,待详述
  --rm=false                 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
  --sig-proxy=true           设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理
  -t, --tty=false            分配tty设备,该可以支持终端登录
  -u, --user=""              指定容器的用户
  -v, --volume=[]            给容器挂载存储卷,挂载到容器的某个目录
  --volumes-from=[]          给容器挂载其他容器上的卷,挂载到容器的某个目录
  -w, --workdir=""           指定容器的工作目录

Docker容器备份

docker commit nginx mynginx  # 将容器保存为镜像
docker save -o [tar包真实路径] [镜像名 ](ID也可以) # 打包镜像为tar
docker load -i [tar包真实路径] # 恢复

docker export e950a988d058 > /opt/gitlab-zh.tar # 根据容器导出镜像容器
docker import - 镜像名 < /opt/gitlab-zh.tar # 导入$ docker import http://example.com/exampleimage.tgz example/imagerepo # 
url导入ocker import http://example.com/exampleimage.tgz example/imagerepo # 通过url导入

删除Docker容器

docker container rm $docker_id # 删除已经停止的某个或几个Docker容器
docker container prune # 删除所有的停止的Docker容器

获取Docker容器的信息,进入容器

docker exec -it 容器名 /bin/bash # 进入Docker容器
docker exec  容器名 容器内命令 # 直接在Docker容器外部执行容器的命令
docker attach 44fc0f0582d9  # 多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。
exit # 退出

docker inspect 容器名 # 这个命令会返回一个大json字符串,可一次性取得docker全部内容
docker inspect --format=’{{.NetworkSettings.要获取的Key}}’ 容器名称(容器ID) # 获取Docker容器指定的信息

停止并删除所有容器

docker container ls -aq # 生成所有容器的列表
docker container stop $(docker container ls -aq) # 停止所有正在运行的容器
docker container rm $(docker container ls -aq) # 删除所有的容器
docker rm containerid

3.镜像操作

docker image ls # 查看所有的Docker镜像
docker image rm 75835a67d134 # 删除镜像
docker image prune # 删除未标记且未被任何容器使用的镜像
docker image prune -a # 要删除所有现有容器未引用的所有镜像
docker rmi # 删除image
docker pull ubuntu:13.10 # 拉取
docker search httpd # 查找镜像
docker container commit < 输入你的 CONTAINER_ID > <需要构建的镜像名:版本号> # -m: 提交的描述信息,-a: 指定镜像作者
docker tag ubuntu:18.04 username/ubuntu:18.04 # 推送镜像

4.Volume操作

删除Docker卷

docker volume ls # 查看卷
docker volume rm volume_id # 删除卷
docker volume prune # 删除所有未使用的卷

5.Network操作

删除Docker构建的网络

docker network ls # 查看所有的网络
docker network rm network_id # 删除某个网络
docker network prune # 删除所有未使用的网络
docker network create -d bridge test-net # 创建一个网络    

6.DockerHub

Docker账户创建以及镜像库的构建

docker pull 镜像名:version # 默认为latest最新版

7.其他操作

删除所有未使用的Docker对象

docker system prune
# 有提示使用-f或--force选项绕过提示,要删除所有未使用的卷,请传递--volumes选项:
docker system prune --volumes
docker pause # 暂停容器中所有的进程。
docker unpause # 恢复容器中所有的进程。
docker top :查看容器中运行的进程信息,支持 ps 命令参数。

其他容器操作

docker history image-name  # 查看docker镜像的历史
docker ps # 显示所有的容器
docker ps -a # 显示所有的容器
docker ps -l # 显示最近创建的容器

attach      介入到一个正在运行的容器
build       根据 Dockerfile 构建一个镜像
cp          在本地文件系统与容器中复制 文件/文件夹
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp  96f7f14e99ab:/www /tmp/

docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
docker cp /www/runoob 96f7f14e99ab:/www/

create      创建一个新容器
exec        在容器中执行一条命令
images      列出镜像
kill        杀死一个或多个正在运行的容器    
logs        取得容器的日志
pause       暂停一个或多个容器的所有进程
ps          列出所有容器
pull        拉取一个镜像或仓库到 registry
push        推送一个镜像或仓库到 registry
rename      重命名一个容器
restart     重新启动一个或多个容器
rm          删除一个或多个容器
rmi         删除一个或多个镜像
run         在一个新的容器中执行一条命令
search      在 Docker Hub 中搜索镜像
start       启动一个或多个已经停止运行的容器
stats       显示一个容器的实时资源占用
stop        停止一个或多个正在运行的容器
tag         为镜像创建一个新的标签
top         显示一个容器内的所有进程
unpause     恢复一个或多个容器内所有被暂停的进程

8.Dockerfile

FROM centos
VOLUME ["volume01","volume02"]
CMD echo"----end----"
CMD /bin/bash

9.DockerMachine

base=https://github.com/docker/machine/releases/download/v0.16.0 &&
  curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine &&
  sudo install /tmp/docker-machine /usr/local/bin/docker-machine
docker-machine version
使用Docker Machine,要通过docker-machine create命令创建Docker机器。
docker-machine create [OPTIONS] [arg...]

10.Swarm

创建一个新的Swarm集群:
该命令的输出提示当前节点已成为管理器,还包括将新节点加入集群的命令。根据--token选项的值,节点将作为管理器或工作者的角色加入。
docker info
docker node ls
# 创建集群
docker service create --replicas 1 --name helloworld alpine ping baidu.com

11.日常使用的容器

mysql

sudo docker run -p 3306:3306 --name mysqltest -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

emby

docker run -d \
    --volume /volume2/docker/emby:/config \ 
    --volume /volume2/wd-video/Links/Links:/wd-video \
    --net=host \
    --device /dev/dri:/dev/dri \ 
    --publish 8097:8096 \ 
    --env UID=1000 \ 
    --env GID=100 \ 
    --env GIDLIST=100 \ 
    zishuo/embyserver:latest \

qinglong

docker run -dit \
  -v /root/ql:/ql/data \
  -p 5700:5700 \
  --name qinglong \
  --hostname qinglong \
  --restart unless-stopped \
  whyour/qinglong:latest

portainer

docker run -d --restart=always --name="portainer" -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /volume2/docker/portainer/data:/data 6053537/portainer-ceshell

jellyfin

docker run -d -p 8096:8096  -v /volume2/wd-video/Links/Links:/wd-video -v /volume1/video/Links/Links:/video -v /volume2/docker/jellyfin/config:/config --device /dev/dri:/dev/dri  nyanmisaka/jellyfin

chinesesubfinder

docker run -d \
    -v /volume2/docker/ChiSu/config:/config \
    -v /volume2/wd-video/Links/Links/电影:/media/movie       \
    -v /volume2/docker/browser:/root/.cache/rod/browser \
    -e PUID=1026 \
    -e PGID=100 \
    -e PERMS=true       \
    -e TZ=Asia/Shanghai \
    -e UMASK=022       \
    -p 19035:19035 \
    -p 19037:19037 \
    --name chinesesubfinder \
    --hostname chinesesubfinder  \
    allanpk716/chinesesubfinder 

alist

    docker run -d --restart=always -v /volume3/docker/alist/config:/opt/alist/data -p 5244:5244 --name="alist" xhofe/alist:latest

nastools

docker run -d \
    --name nas-tools \
    --hostname nas-tools \
    -p 3000:3000 `# 默认的webui控制端口` \
    -v /volume3/docker/nastools/config:/config \
    -v /volume2/wd-video:wd-video `# 媒体目录,多个目录需要分别映射进来` \
    -e PUID=0 `# 想切换为哪个用户来运行程序,该用户的uid,详见下方说明` \
    -e PGID=0 `# 想切换为哪个用户来运行程序,该用户的gid,详见下方说明` \
    -e UMASK=000 `# 掩码权限,默认000,可以考虑设置为022` \
    -e NASTOOL_AUTO_UPDATE=false `# 如需在启动容器时自动升级程程序请设置为true` \
    jxxghp/nas-tools

qbittorrent

docker run -d \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Asia/Shanghai \
  -e WEBUI_PORT=8085 \
  -p 6881:6881 \
  -p 6881:6881/udp \
  -p 8085:8080 \
  -v $PWD/config:/config \
  -v $PWD/downloads:/downloads \
  --restart unless-stopped \
  chisbread/qbittorrent:latest

transmission

docker run -d \
    --name=transmission \
    -e PUID=1000 \
    -e PGID=1000 \
    -e TZ=Asia/Shanghai \
    -e USER=transmission `#optional` \
    -e PASS=transmission `#optional` \
    -e RPCPORT=9091 `#optional` \
    -e PEERPORT=51413 `#optional` \
    -e HOST_WHITELIST=dnsnane list  \
    -v /volume3/docker/transmission/config:/config \
    -v /volume2/wd-video:/wd-video \
    --restart unless-stopped \
    chisbread/transmission:latest

emby

docker run -d \
   --name embyserver \
   -v /volume3/docker/emby/config:/config \
   -v /volume1/video/Links/Links:/video \
   -p 43997:8096 \
   --restart unless-stopped \
   lovechen/embyserver

tmdb

54.149.176.35    keys.lime-technology.com
13.225.176.94 api.themoviedb.org
13.226.238.82 api.themoviedb.org
99.84.130.66 www.themoviedb.org
104.16.61.155 image.tmdb.org
199.232.4.133 raw.githubusercontent.com

54.192.122.94 image.tmdb.org
54.192.122.77 api.themoviedb.org
54.192.122.70 image.tmdb.org
54.192.122.30 api.themoviedb.org
54.192.122.123 api.themoviedb.org
54.192.122.12 image.tmdb.org
54.192.122.117 api.themoviedb.org
54.192.122.105 image.tmdb.org
185.199.108.153 asset-cdn.github.com
185.199.108.133 raw.githubusercontent.com
140.82.113.3 github.com
108.159.227.40 www.themoviedb.org
108.159.227.37 www.themoviedb.org
108.159.227.27 www.themoviedb.org
108.159.227.111 www.themoviedb.org

calibre-web

docker run -d \
  --name=calibre-web \
  -e PUID=1000 \
  -e PGID=1000 \
  -e TZ=Europe/London \
  -e DOCKER_MODS=linuxserver/mods:universal-calibre `#optional` \
  -e OAUTHLIB_RELAX_TOKEN_SCOPE=1 `#optional` \
  -p 8083:8083 \
  -v /path/to/data:/config \
  -v /path/to/calibre/library:/books \
  --restart unless-stopped \
  lscr.io/linuxserver/calibre-web:latest

wallabag

docker run -v /opt/wallabag/data:/var/www/wallabag/data -v /opt/wallabag/images:/var/www/wallabag/web/assets/images -p 8090:80  wallabag/wallabag

mysql

docker run -d --name mysql-01 -p 3306:13306 -e MYSQL_ROOT_PASSWORD=root  mysql

portainer-ce

docker run -d --restart=always --name="portainer" -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /volume3/docker/portainer/data:/date 6053537/portainer-ce

zhenxun

version: "2.6.1"
services:
    # 数据库
    postgres:
        image: postgres:alpine
        restart: on-failure
        container_name: PostgreSQL
        ports:
            - 5432:5432 # 端口映射
        environment:
            POSTGRES_USER: zhenxun # 数据库用户
            POSTGRES_PASSWORD: 123456 # 数据库用户密码
            POSTGRES_DB: zhenxun_db # 默认数据库
        volumes:
            - postgres_data:/var/lib/postgresql/data

    # Go-cqhttp
    go-cqhttp:
        container_name: Go-cqhttp
        restart: on-failure
        image: jyishit/go-cqhttp
        links:
            - zhenxun
        depends_on:
            - zhenxun
        environment:
            - bot_qq= # !!!Bot用的QQ号
            - bot_passwd= # !!!Bot用的QQ密码
        volumes:
            - go-cqhttp_data:/home
            - bot_data:/home/zhenxun_bot

    # 机器人本体
    zhenxun:
        container_name: ZhenXun-bot
        restart: on-failure
        image: jyishit/zhenxun_bot
        volumes:
            - ./my_plugins:/home/my_plugins
            - bot_data:/home/zhenxun_bot
            
        ports:
            - 8080:8080
        links:
            - postgres
        depends_on:
            - postgres
        environment:
            - webui_user=admin # webui的用户名
            - webui_passwd=123456 # webui的密码
            - admin_qq=993177194 # !!!管理员的QQ号
    webui:
         container_name: webui
         restart: on-failure
         image: jyishit/zhenxun_webui
         ports:
             - 8081:80
         depends_on:
             - zhenxun
         links:
             - zhenxun

volumes:
    bot_data:
    go-cqhttp_data:
    postgres_data:

redis

docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name myredis -v /root/redis/config:/etc/redis -v /root/redis/data:/data -d redis redis-server /etc/redis/redis.conf  --appendonly yes
0

评论 (0)

取消