三个基本概念

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)

    基本使用

    获取镜像

    1. docker pull
    $ docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] ```shell $ docker pull arm64v8/centos:centos7.9.2009 https://hub.docker.com/r/arm64v8/centos/tags

$ docker pull arm64v8/redis:4.0.14 https://hub.docker.com/r/arm64v8/redis/tags

$ docker pull arm64v8/nginx:1.21.5 https://hub.docker.com/r/arm64v8/nginx/tags

  1. <a name="C4HBq"></a>
  2. ### 启动镜像
  3. 浏览器直接访问:[http://localhost](http://localhost)
  4. ```shell
  5. docker run --name webserver01 -d -p 80:80 arm64v8/nginx:1.21.5

[

](http://localhost)

进入镜像

  1. docker exec -it webserver01 bash

停止所有容器

  1. docker stop $(docker ps -aq)

列表镜像

  1. docker image ls --digests

镜像体积

  1. docker system df

删除本地镜像

  1. docker rm $(docker ps -aq)

删除本地镜像

  1. docker rmi $(docker images -q)

利用 commit 理解镜像构成

1、启动镜像、修改镜像内容

  1. # 启动镜像
  2. docker run --name webserver01 -d -p 80:80 arm64v8/nginx:1.21.5
  3. # 进入容器
  4. docker exec -it webserver01 bash
  5. # 进入容器执行命令
  6. root@e1f2d0f36b7b:/# echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
  7. root@e1f2d0f36b7b:/# exit
  8. exit

image.png

2、查看容器修改的记录

现在我们定制好变化的容器

  1. ~ docker diff webserver01
  2. C /usr
  3. C /usr/share
  4. C /usr/share/nginx
  5. C /usr/share/nginx/html
  6. C /usr/share/nginx/html/index.html
  7. C /root
  8. A /root/.bash_history
  9. C /run
  10. A /run/nginx.pid
  11. C /etc
  12. C /etc/nginx
  13. C /etc/nginx/conf.d
  14. C /etc/nginx/conf.d/default.conf
  15. C /var
  16. C /var/cache
  17. C /var/cache/nginx
  18. A /var/cache/nginx/client_temp
  19. A /var/cache/nginx/fastcgi_temp
  20. A /var/cache/nginx/proxy_temp
  21. A /var/cache/nginx/scgi_temp
  22. A /var/cache/nginx/uwsgi_temp

3、容器内容变更提交

  1. docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]

我们可以用下面的命令将容器保存为镜像:

  1. ~ docker commit \
  2. --author "Tao Wang <twang2218@gmail.com>" \
  3. --message "修改了默认网页" \
  4. webserver01 \
  5. webserver01:v1.0
  6. sha256:06e2388510e92aa6ac090993ecb3a61ade3b6ed4395379abf4e8cf4eb9ea1b3d

其中 --author 是指定修改的作者,而 --message 则是记录本次修改的内容。
这点和git版本控制相似,不过这里这些信息可以省略留空。

4、查看提交历史

  1. ~ docker history webserver01:v1.0
  2. IMAGE CREATED CREATED BY SIZE COMMENT
  3. 06e2388510e9 About a minute ago nginx -g daemon off; 1.19kB 修改了默认网页
  4. eeb9db34b331 13 days ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B
  5. <missing> 13 days ago /bin/sh -c #(nop) STOPSIGNAL SIGQUIT 0B
  6. <missing> 13 days ago /bin/sh -c #(nop) EXPOSE 80 0B
  7. <missing> 13 days ago /bin/sh -c #(nop) ENTRYPOINT ["/docker-entr… 0B
  8. <missing> 13 days ago /bin/sh -c #(nop) COPY file:09a214a3e07c919a… 4.61kB
  9. <missing> 13 days ago /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7… 1.04kB
  10. <missing> 13 days ago /bin/sh -c #(nop) COPY file:0b866ff3fc1ef5b0… 1.96kB
  11. <missing> 13 days ago /bin/sh -c #(nop) COPY file:65504f71f5855ca0… 1.2kB
  12. <missing> 13 days ago /bin/sh -c set -x && addgroup --system -… 60.1MB
  13. <missing> 13 days ago /bin/sh -c #(nop) ENV PKG_RELEASE=1~bullseye 0B
  14. <missing> 13 days ago /bin/sh -c #(nop) ENV NJS_VERSION=0.7.1 0B
  15. <missing> 13 days ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.21.5 0B
  16. <missing> 3 weeks ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B
  17. <missing> 3 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B
  18. <missing> 3 weeks ago /bin/sh -c #(nop) ADD file:986f91febed4aa8e2… 74.3MB

镜像重命名

  1. $ docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)
  2. ~ docker image ls --digests -a
  3. REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
  4. edwin05/arm64v8/centos 7.9.2009-v0.1 <none> bfa728c397c1 4 seconds ago 766MB
  5. arm64v8/nginx 1.21.5 sha256:50ab7908620ee92646ddcd9fe321f969cdff672819fd9c8427448f67f59ef32e eeb9db34b331 13 days ago 134MB
  6. arm64v8/centos 7.9.2009 sha256:864a7acea4a5e8fa7a4d83720fbcbadbe38b183f46f3600e04a3f8c1d961ed87 dfc30428e163 3 months ago 301MB
  7. arm64v8/redis 4.0.14 sha256:0209d6c699ce70261308a93b0cd283766bdc9004b4e8f500c52941e9e066b692 7a8c2384752f 20 months ago 83.5MB
  8. ~ docker tag bfa728c397c1 edwin05/arm64v8-centos:7.9.2009-v0.1
  9. ~ docker image ls --digests -a
  10. REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
  11. edwin05/arm64v8-centos 7.9.2009-v0.1 <none> bfa728c397c1 8 minutes ago 766MB
  12. edwin05/arm64v8/centos 7.9.2009-v0.1 <none> bfa728c397c1 8 minutes ago 766MB
  13. arm64v8/nginx 1.21.5 sha256:50ab7908620ee92646ddcd9fe321f969cdff672819fd9c8427448f67f59ef32e eeb9db34b331 13 days ago 134MB
  14. arm64v8/centos 7.9.2009 sha256:864a7acea4a5e8fa7a4d83720fbcbadbe38b183f46f3600e04a3f8c1d961ed87 dfc30428e163 3 months ago 301MB
  15. arm64v8/redis 4.0.14 sha256:0209d6c699ce70261308a93b0cd283766bdc9004b4e8f500c52941e9e066b692 7a8c2384752f 20 months ago 83.5MB
  16. ~

推送镜像到仓库

docker login
用户登录后,可以通过 docker push 命令将自己的镜像推送到 Docker Hub。
以下命令中的 username 请替换为你的 Docker 账号用户名。

  1. $ docker tag ubuntu:18.04 username/ubuntu:18.04
  2. $ docker image ls
  3. $ docker push username/ubuntu:18.04
  4. $ docker search username/ubuntu

推送镜像

  1. $ docker tag arm64v8-centos-7.9.2009:v0.1 edwin05/centos:arm64v8-centos-7.9.2009-v0.1
  2. $ docker push edwin05/centos:arm64v8-centos-7.9.2009-v0.1
  3. The push refers to repository [docker.io/edwin05/centos]
  4. 934387b91c39: Pushed
  5. 65f23ff12f4d: Pushing [=====> ] 31.67MB/300.7MB

docker运行mysql

  1. docker run -p 3306:3306 --name mysql \
  2. -v /Users/edwin/mydata/mysql/log:/var/log/mysql \
  3. -v /Users/edwin/mydata/mysql/data:/var/lib/mysql \
  4. -v /Users/edwin/mydata/mysql/conf:/etc/mysql \
  5. -e MYSQL_ROOT_PASSWORD=root \
  6. -d mysql:5.7

docker container ls -all

将容器8080映射到宿主机81
docker run -it -d -p 81:8080 —privileged=true —name centos-tomcat81 arm64v8/centos:7.9.2009

其他问题

配置独立IP

https://www.bilibili.com/video/BV1pK411s7j9?from=search&seid=15068607730778544061&spm_id_from=333.337.0.0

  1. docker network create -d macvlan --subnet=192.168.199.1/24 --gateway=192.168.199.255 -o parent=en0 -o macvlan_mode=bridge bridge_macvlan_home
  2. docker run -d --name XXX --net=bridge_macvlan_home --ip=容器ip XXX/XXX:latest