三个基本概念
- 镜像(Image)
- 容器(Container)
- 仓库(Repository)
基本使用
获取镜像
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
<a name="C4HBq"></a>### 启动镜像浏览器直接访问:[http://localhost](http://localhost)```shelldocker run --name webserver01 -d -p 80:80 arm64v8/nginx:1.21.5
[
进入镜像
docker exec -it webserver01 bash
停止所有容器
docker stop $(docker ps -aq)
列表镜像
docker image ls --digests
镜像体积
docker system df
删除本地镜像
docker rm $(docker ps -aq)
删除本地镜像
docker rmi $(docker images -q)
利用 commit 理解镜像构成
1、启动镜像、修改镜像内容
# 启动镜像docker run --name webserver01 -d -p 80:80 arm64v8/nginx:1.21.5# 进入容器docker exec -it webserver01 bash# 进入容器执行命令root@e1f2d0f36b7b:/# echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.htmlroot@e1f2d0f36b7b:/# exitexit
2、查看容器修改的记录
现在我们定制好变化的容器
➜ ~ docker diff webserver01C /usrC /usr/shareC /usr/share/nginxC /usr/share/nginx/htmlC /usr/share/nginx/html/index.htmlC /rootA /root/.bash_historyC /runA /run/nginx.pidC /etcC /etc/nginxC /etc/nginx/conf.dC /etc/nginx/conf.d/default.confC /varC /var/cacheC /var/cache/nginxA /var/cache/nginx/client_tempA /var/cache/nginx/fastcgi_tempA /var/cache/nginx/proxy_tempA /var/cache/nginx/scgi_tempA /var/cache/nginx/uwsgi_temp
3、容器内容变更提交
docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
我们可以用下面的命令将容器保存为镜像:
➜ ~ docker commit \--author "Tao Wang <twang2218@gmail.com>" \--message "修改了默认网页" \webserver01 \webserver01:v1.0sha256:06e2388510e92aa6ac090993ecb3a61ade3b6ed4395379abf4e8cf4eb9ea1b3d
其中 --author 是指定修改的作者,而 --message 则是记录本次修改的内容。
这点和git版本控制相似,不过这里这些信息可以省略留空。
4、查看提交历史
➜ ~ docker history webserver01:v1.0IMAGE CREATED CREATED BY SIZE COMMENT06e2388510e9 About a minute ago nginx -g daemon off; 1.19kB 修改了默认网页eeb9db34b331 13 days ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B<missing> 13 days ago /bin/sh -c #(nop) STOPSIGNAL SIGQUIT 0B<missing> 13 days ago /bin/sh -c #(nop) EXPOSE 80 0B<missing> 13 days ago /bin/sh -c #(nop) ENTRYPOINT ["/docker-entr… 0B<missing> 13 days ago /bin/sh -c #(nop) COPY file:09a214a3e07c919a… 4.61kB<missing> 13 days ago /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7… 1.04kB<missing> 13 days ago /bin/sh -c #(nop) COPY file:0b866ff3fc1ef5b0… 1.96kB<missing> 13 days ago /bin/sh -c #(nop) COPY file:65504f71f5855ca0… 1.2kB<missing> 13 days ago /bin/sh -c set -x && addgroup --system -… 60.1MB<missing> 13 days ago /bin/sh -c #(nop) ENV PKG_RELEASE=1~bullseye 0B<missing> 13 days ago /bin/sh -c #(nop) ENV NJS_VERSION=0.7.1 0B<missing> 13 days ago /bin/sh -c #(nop) ENV NGINX_VERSION=1.21.5 0B<missing> 3 weeks ago /bin/sh -c #(nop) LABEL maintainer=NGINX Do… 0B<missing> 3 weeks ago /bin/sh -c #(nop) CMD ["bash"] 0B<missing> 3 weeks ago /bin/sh -c #(nop) ADD file:986f91febed4aa8e2… 74.3MB
镜像重命名
$ docker tag IMAGEID(镜像id) REPOSITORY:TAG(仓库:标签)➜ ~ docker image ls --digests -aREPOSITORY TAG DIGEST IMAGE ID CREATED SIZEedwin05/arm64v8/centos 7.9.2009-v0.1 <none> bfa728c397c1 4 seconds ago 766MBarm64v8/nginx 1.21.5 sha256:50ab7908620ee92646ddcd9fe321f969cdff672819fd9c8427448f67f59ef32e eeb9db34b331 13 days ago 134MBarm64v8/centos 7.9.2009 sha256:864a7acea4a5e8fa7a4d83720fbcbadbe38b183f46f3600e04a3f8c1d961ed87 dfc30428e163 3 months ago 301MBarm64v8/redis 4.0.14 sha256:0209d6c699ce70261308a93b0cd283766bdc9004b4e8f500c52941e9e066b692 7a8c2384752f 20 months ago 83.5MB➜ ~ docker tag bfa728c397c1 edwin05/arm64v8-centos:7.9.2009-v0.1➜ ~ docker image ls --digests -aREPOSITORY TAG DIGEST IMAGE ID CREATED SIZEedwin05/arm64v8-centos 7.9.2009-v0.1 <none> bfa728c397c1 8 minutes ago 766MBedwin05/arm64v8/centos 7.9.2009-v0.1 <none> bfa728c397c1 8 minutes ago 766MBarm64v8/nginx 1.21.5 sha256:50ab7908620ee92646ddcd9fe321f969cdff672819fd9c8427448f67f59ef32e eeb9db34b331 13 days ago 134MBarm64v8/centos 7.9.2009 sha256:864a7acea4a5e8fa7a4d83720fbcbadbe38b183f46f3600e04a3f8c1d961ed87 dfc30428e163 3 months ago 301MBarm64v8/redis 4.0.14 sha256:0209d6c699ce70261308a93b0cd283766bdc9004b4e8f500c52941e9e066b692 7a8c2384752f 20 months ago 83.5MB➜ ~
推送镜像到仓库
docker login
用户登录后,可以通过 docker push 命令将自己的镜像推送到 Docker Hub。
以下命令中的 username 请替换为你的 Docker 账号用户名。
$ docker tag ubuntu:18.04 username/ubuntu:18.04$ docker image ls$ docker push username/ubuntu:18.04$ docker search username/ubuntu
推送镜像
$ docker tag arm64v8-centos-7.9.2009:v0.1 edwin05/centos:arm64v8-centos-7.9.2009-v0.1$ docker push edwin05/centos:arm64v8-centos-7.9.2009-v0.1The push refers to repository [docker.io/edwin05/centos]934387b91c39: Pushed65f23ff12f4d: Pushing [=====> ] 31.67MB/300.7MB
docker运行mysql
docker run -p 3306:3306 --name mysql \-v /Users/edwin/mydata/mysql/log:/var/log/mysql \-v /Users/edwin/mydata/mysql/data:/var/lib/mysql \-v /Users/edwin/mydata/mysql/conf:/etc/mysql \-e MYSQL_ROOT_PASSWORD=root \-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
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_homedocker run -d --name XXX --net=bridge_macvlan_home --ip=容器ip XXX/XXX:latest
