三个基本概念
- 镜像(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)
```shell
docker 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.html
root@e1f2d0f36b7b:/# exit
exit
2、查看容器修改的记录
现在我们定制好变化的容器
➜ ~ docker diff webserver01
C /usr
C /usr/share
C /usr/share/nginx
C /usr/share/nginx/html
C /usr/share/nginx/html/index.html
C /root
A /root/.bash_history
C /run
A /run/nginx.pid
C /etc
C /etc/nginx
C /etc/nginx/conf.d
C /etc/nginx/conf.d/default.conf
C /var
C /var/cache
C /var/cache/nginx
A /var/cache/nginx/client_temp
A /var/cache/nginx/fastcgi_temp
A /var/cache/nginx/proxy_temp
A /var/cache/nginx/scgi_temp
A /var/cache/nginx/uwsgi_temp
3、容器内容变更提交
docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]
我们可以用下面的命令将容器保存为镜像:
➜ ~ docker commit \
--author "Tao Wang <twang2218@gmail.com>" \
--message "修改了默认网页" \
webserver01 \
webserver01:v1.0
sha256:06e2388510e92aa6ac090993ecb3a61ade3b6ed4395379abf4e8cf4eb9ea1b3d
其中 --author
是指定修改的作者,而 --message
则是记录本次修改的内容。
这点和git
版本控制相似,不过这里这些信息可以省略留空。
4、查看提交历史
➜ ~ docker history webserver01:v1.0
IMAGE CREATED CREATED BY SIZE COMMENT
06e2388510e9 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 -a
REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
edwin05/arm64v8/centos 7.9.2009-v0.1 <none> bfa728c397c1 4 seconds ago 766MB
arm64v8/nginx 1.21.5 sha256:50ab7908620ee92646ddcd9fe321f969cdff672819fd9c8427448f67f59ef32e eeb9db34b331 13 days ago 134MB
arm64v8/centos 7.9.2009 sha256:864a7acea4a5e8fa7a4d83720fbcbadbe38b183f46f3600e04a3f8c1d961ed87 dfc30428e163 3 months ago 301MB
arm64v8/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 -a
REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE
edwin05/arm64v8-centos 7.9.2009-v0.1 <none> bfa728c397c1 8 minutes ago 766MB
edwin05/arm64v8/centos 7.9.2009-v0.1 <none> bfa728c397c1 8 minutes ago 766MB
arm64v8/nginx 1.21.5 sha256:50ab7908620ee92646ddcd9fe321f969cdff672819fd9c8427448f67f59ef32e eeb9db34b331 13 days ago 134MB
arm64v8/centos 7.9.2009 sha256:864a7acea4a5e8fa7a4d83720fbcbadbe38b183f46f3600e04a3f8c1d961ed87 dfc30428e163 3 months ago 301MB
arm64v8/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.1
The push refers to repository [docker.io/edwin05/centos]
934387b91c39: Pushed
65f23ff12f4d: 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_home
docker run -d --name XXX --net=bridge_macvlan_home --ip=容器ip XXX/XXX:latest