docker - !! 看这个就够了-- 非常重要 - 对于 image, container 等的基本操作,
访问量: 1461
两个非常重要的概念: image , container
image: 镜像, 静态的东东, 可以被commit. 可以被删除。
container: docker "run" (注意是不是start ) image 之后的到的东东. 内容不会被自动保存。 docker run 命令 就会产生新的。 而且docker 的理念是container 可以随时随地产生和抛弃。
docker run 命令: 根据image 来得到一个运行中的 container .这是一个崭新的container.
docker start 命令: 把之前停止的 container 跑起来
可以通过 --help 来查看 详细命令,例如 $ docker run --help 会打印出详细的解释。
docker ps 查看 运行中的container
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fde1709c0722 xx_backend "bundle exec puma -C…" 15 hours ago Up 15 hours 0.0.0.0:8333->443/tcp, 0.0.0.0:3333->3000/tcp xx_backend_1 a6cce4485a11 gate_rails "sh -c 'rm -f tmp/pi…" 37 hours ago Up 37 hours 0.0.0.0:8443->443/tcp, 0.0.0.0:3001->3000/tcp gateapp 46e63e19f41f redis "docker-entrypoint.s…" 39 hours ago Up 15 hours 0.0.0.0:6379->6379/tcp art-lesson_redis_1
docker ps -a 查看所有的container
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 09eb05026ee3 art-lesson_operator_frontend "docker-entrypoint.s…" 15 hours ago Exited (1) 5 minutes ago art-lesson_operator_frontend_1 fde1709c0722 art-lesson_backend "bundle exec puma -C…" 15 hours ago Up 15 hours 0.0.0.0:8333->443/tcp, 0.0.0.0:3333->3000/tcp art-lesson_backend_1 b52fb63efbbe c00d6886c4eb "docker-entrypoint.s…" 16 hours ago Exited (0) 16 hours ago wizardly_goldstine 8b987c955e58 dc14bf43540d "/bin/sh -c 'set -e …" 16 hours ago Exited (137) 16 hours ago sharp_perlman a6cce4485a11 gate_rails "sh -c 'rm -f tmp/pi…" 37 hours ago Up 37 hours 0.0.0.0:8443->443/tcp, 0.0.0.0:3001->3000/tcp gateapp 46e63e19f41f redis "docker-entrypoint.s…" 39 hours ago Up 15 hours 0.0.0.0:6379->6379/tcp art-lesson_redis_1 f349047c5be2 933f6 "/bin/bash" 14 months ago Exited (0) 14 months ago competent_noether 43e658ea2787 933f6 "/bin/bash" 14 months ago Exited (0) 14 months ago jolly_turing abda2002620b 933f6d242546 "-v /workspace:/work…" 14 months ago Created relaxed_johnson 333d33e9ef2b vulhub/nginx:heartbleed "/usr/local/nginx/sb…" 15 months ago Exited (255) 15 months ago 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp heartbleed_nginx_1 b9a24255799f imagetragick_apache "docker-php-entrypoi…" 15 months ago Exited (0) 15 months ago imagetragick_apache_1
docker run <image_name>
根据已有的image 创建一个新的container 并运行
例子: 运行 image: 933f6, 使用host ip, 并且把 host 的 /workspace 文件夹加载到container 中的 /workspace
docker run -v /workspace:/workspace --net=host -it --hostname=admin-container 933f6
docker create
创建一个新的container ,但是不启动
docker start <id>
运行一个已经存在的,并且已经停止的container
docker stop <id>
停止已经一个存在的container
docker rm <container id>
删除一个或者多个container
docker image ls 或者 $ docker images
查看本地所有的image
docker exec -it <container id> /bin/bash
直接类似于使用ssh 登录一个container
docker attach <container id>
查看某个container
docker logs <container id>
查看某个container 的shell的输出
docker inspect <container id> , 查看某个container的详细情况. 包括ip 等。
docker inspect c7180f611c13 [ { "Id": "c7180f611c13d238755898e83f7fdefb06fad782f87e3ec9e260d3f62625c9a0", "Created": "2020-12-14T09:44:03.290361691Z", "Path": "/bin/bash", "Args": [], "State": { "Status": "running", "Running": true, "Paused": false, "Restarting": false, "OOMKilled": false, "Dead": false, "Pid": 8122, "ExitCode": 0, "Error": "", "StartedAt": "2020-12-14T09:44:03.899503111Z", "FinishedAt": "0001-01-01T00:00:00Z" },
docker ps 列出运行中的container ( 如果要列出所有,就 docker ps -a )
# docker top c7180f611c13 UID PID PPID C STIME TTY TIME CMD root 8122 8096 0 17:44 pts/0 00:00:00 /bin/bash
docker commit ( 记得要在 docker-compose停止之后, 否则会卡死)
1. 先把docker停止,然后 docker ps -a 就可以看到所有的container. exit也没问题.
为某个image 进行内容的永久性修改. 记得: 务必要加上 <container id> image:tag_name 作为结尾, 例如:
docker commit -a 'dashi' -m '增加tag名字' c7180f611c13 ubuntu:add_vim
sha256:4efbaa2d43fc40ac308297fe6e0df72fd2e55a9700abee5c9e4aa28b41cbf0a4
后面的:add_vim 不加的话,默认就是 :lastest , -a 'dashi' 也可以不加.
docker rmi <image_id> 删掉某个image
$ sudo docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE snexx_data_rails latest 0de6f45596fa 34 seconds ago 1.19GB snexx_data_rails installed_gems f8c24d5a9f1c 2 minutes ago 1.19GB mysql 5.7 82d2d47667cf 18 hours ago 450MB ubuntu latest 825d55fb6340 2 weeks ago 72.8MB hello-world latest feb5d9fea6a5 6 months ago 13.3kB ruby 2.5.8 fc5e02c64ca4 12 months ago 843MB $ sudo docker rmi f8c24d Untagged: sneak_data_rails:installed_gems Deleted: sha256:f8c24d5a9f1ccf3c70ab3ef3a67cae0124d506e8c8a1bb3d6461676daf3b344f Deleted: sha256:1a585b5ce639cb9d2b569d0a372d75bae57496415d03322fd1b57325e1ac8462 $ sudo docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE snexx_data_rails latest 0de6f45596fa About a minute ago 1.19GB mysql 5.7 82d2d47667cf 18 hours ago 450MB ubuntu latest 825d55fb6340 2 weeks ago 72.8MB hello-world latest feb5d9fea6a5 6 months ago 13.3kB ruby 2.5.8 fc5e02c64ca4 12 months ago 843MB
docker image ls 列出所有的docker image
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu add_vim 4efbaa2d43fc About a minute ago 167MB
docker export
把 container 导出 , 例如: docker export -o rails_container.tar c7180f611c13
docker save
把 image 导出, 例如: docker save -o rails_image.tar 253ea174ad29
docker load
docker import
把image 导入。(但是不运行,仅仅导入到本地的image 仓库)
docker cp
把本地的copy到container 中。 或者反之
docker cp <containerId>:/file/path/within/container /host/path/target
或者 docker cp ~/.vim <containerid>:/root
docker run 运行docker ,并且加上各种参数。
-v 加上本地存储
docker 不支持symlink, 参考: https://stackoverflow.com/questions/38485607/mount-host-directory-with-a-symbolic-link-inside-in-docker-container/40322275
docker-compose
运行某个指定的yml文件:
docker-compose -f ./docker-compose.yml up
另一个例子: (会在本地目录寻找 .privoxy, 然后运行里面的Dockerfile )
version: '3' services: socks5tohttp_proxy: build: ./privoxy container_name: "socks5tohttp_proxy" volumes: - /g/workspace/temp_socks_to_http_proxy:/root command: 'tail -f /dev/null' #command: 'mysqld' ports: - "1080:1080" stdin_open: true tty: true #environment: # - MYSQL_ROOT_PASSWORD=666666 # - MYSQL_ROOT_HOST=%
./privoxy文件夹如下:
FROM alpine:3.11 RUN apk update \ && apk add privoxy \ && rm -rf /var/cache/apk/* # CMD ["privoxy","--no-daemon","/etc/privoxy/config"]
进来之后就可以随便操作了:
/ # ps PID USER TIME COMMAND 1 root 0:00 tail -f /dev/null 15 root 0:00 sh 21 root 0:00 ps
Dockerfile 中的基本命令
WORKDIR 类似于cd
RUN 运行一个命令
COPY 把本地文件夹copy到docker中的某个地方
FROM ruby:3.1.0 # 把host机器的当前目录 copy到docker /app下 COPY . /app # 在docker上, cd /app WORKDIR /app # 复制当前目录下的某个文件到docker中的某个位置 ADD sources.list /etc/apt/sources.list RUN apt update RUN apt install libapr1-dev libxml2-dev libxslt1-dev git curl build-essential libssl-dev libreadline-dev build-essential libssl-dev libreadline-dev vim libcurl4 ruby-dev zlib1g-dev -y RUN apt install liblzma-dev ruby-all-dev postgresql-client libpq5 libpq-dev build-essential libssl-dev libreadline-dev zlib1g-dev libcurl4-openssl-dev uuid-dev -y RUN apt install linux-headers-5.10.0-16-amd64 -y RUN apt install nodejs -y RUN gem install bundler --version 2.3.11 RUN bundle install --verbose
从Docker中访问host: 使用 host.docker.internal
例如: postgres://username@password:host.docker.internal/your-db