docker容器使用
清理缓存
docker system prune -a
清理终止的容器
下面的命令可以清理掉所有处于终止状态的容器。$ docker container prune
编译dockerfile(进入到指定目录,-t指定编译的名称)
docker build -t redis6 .
拉镜像
$ docker pull ubuntu
启动容器
$ docker run -it ubuntu /bin/bash参数说明:-i: 交互式操作。-t: 终端。ubuntu: ubuntu 镜像。/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
查看所有的容器命令如下
$ docker ps -a
启动已停止运行的容器
$ docker start b750bbbcfd88
容器后台运行(不进入容器内部)
在大部分的场景下,我们希望 docker 的服务是在后台运行的,我们可以过 -d 指定容器的运行模式。
$ docker run -itd --name ubuntu-test ubuntu /bin/bash注:加了 -d 参数默认不会进入容器,想要进入容器需要使用指令 docker exec(下面会介绍到)。
停止重启一个容器
$ docker stop <容器 ID>$ docker restart <容器 ID>
进入容器
在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过以下指令进入:
•docker attach•docker exec:推荐大家使用 docker exec 命令,因为此退出容器终端,不会导致容器的停止
attach 命令
$ docker attach 1e560fca3906
•*注意:使用attach,如果从这个容器退出,会导致容器的停止。**
exec 命令
docker exec -it 243c32535da7 /bin/bash
注意:如果从这个容器退出,容器不会停止,这就是为什么推荐大家使用 docker exec 的原因。
导出和导入容器
导出容器
导出容器 1e560fca3906 快照到本地文件 ubuntu.tar。
$ docker export 1e560fca3906 > ubuntu.tar
导入容器快照
可以使用 docker import 从容器快照文件中再导入为镜像,以下实例将快照文件 ubuntu.tar 导入到镜像 test/ubuntu:v1:
$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1
删除容器
删除容器使用 docker rm 命令:
$ docker rm -f 1e560fca3906
docker镜像使用
删除镜像
$ docker rmi hello-world
查找镜像
runoob@runoob:~$ docker search httpdNAME: 镜像仓库源的名称DESCRIPTION: 镜像的描述OFFICIAL: 是否 docker 官方发布stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。AUTOMATED: 自动构建
列出镜像列表
runoob@runoob:~$ docker images* REPOSITORY:表示镜像的仓库源* TAG:镜像的标签* IMAGE ID:镜像ID* CREATED:镜像创建时间* SIZE:镜像大小
创建镜像
我们使用命令 docker build , 从零开始来创建一个新的镜像。为此,我们需要创建一个 Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像。
runoob@runoob:~$ cat DockerfileFROM centos:6.7MAINTAINER Fisher "fisher@sudops.com"RUN /bin/echo 'root:123456' |chpasswdRUN useradd runoobRUN /bin/echo 'runoob:123456' |chpasswdRUN /bin/echo -e "LANG=\"en_US.UTF-8\"" >/etc/default/localEXPOSE 22EXPOSE 80CMD /usr/sbin/sshd -D
•每一个指令都会在镜像上创建一个新的层,每一个指令的前缀都必须是大写的。•第一条FROM,指定使用哪个镜像源•RUN 指令告诉docker 在镜像内执行命令,安装了什么。。。•然后,我们使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像。
#unoob@runoob:~$ docker build -t runoob/centos:6.7 .Sending build context to Docker daemon 17.92 kBStep 1 : FROM centos:6.7---> d95b5ca17cc3Step 2 : MAINTAINER Fisher "fisher@sudops.com"---> Using cache---> 0c92299c6f03Step 3 : RUN /bin/echo 'root:123456' |chpasswd---> Using cache---> 0397ce2fbd0aStep 4 : RUN useradd runoob
参数说明:
•-t :指定要创建的目标镜像名
•. :Dockerfile 文件所在目录,可以指定Dockerfile 的绝对路径
设置镜像标签
我们可以使用 docker tag 命令,为镜像添加一个新的标签。
zhangqideMacBook-Pro:~ zhangqi$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEredis latest 7faaec683238 3 weeks ago 113MBzhangqideMacBook-Pro:~ zhangqi$ docker tag 7faaec683238 redis:redis6zhangqideMacBook-Pro:~ zhangqi$ docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEredis latest 7faaec683238 3 weeks ago 113MBredis redis6 7faaec683238 3 weeks ago 113MB
docker tag 镜像ID,这里是 7faaec683238 ,用户名称(可以为空)、镜像源名(repository name)和新的标签名(tag)。使用 docker images 命令可以看到,ID为860c279d2fec的镜像多一个标签。
Docker 容器连接
前面我们实现了通过网络端口来访问运行在 docker 容器内的服务。容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。下面我们来实现通过端口连接到一个 docker 容器。
网络端口映射
网络端口映射两种方式,区别是:
•-P :是容器内部端口随机映射到主机的高端口。•-p : 是容器内部端口绑定到指定的主机端口
-P随机端口
$ docker run -d -P redis-p指定端口和ip
$ docker run -d -p 127.0.0.1:6380:6379 redis$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 82343ab8311f redis "docker-entrypoint.s…" 6 seconds ago Up 4 seconds 127.0.0.1:6380->6379/tcp infallible_fermat efe4e8579171 8c2c38aa676e "/kube-vpnkit-forwar…" 8 minutes ago Up 8 minutes k8s_vpnkit-controller_vpnkit-controller_kube-system_d487779e-b00f-430a-9b59-0dc9bdede2f9_105
我们也可以使用 -p 标识来指定容器端口绑定到主机端口。在本例中时候容器的6379映射到主机的IP和端口为127.0.0.1:6380# Docker 容器互联## 容器命名
$ docker run -d -P --name redis-1 redis
#我们可以使用 docker ps 命令来查看容器名称。$ docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 275da79b49b1 redis "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 0.0.0.0:55000->6379/tcp redis-1
## 新建网络
$ docker network create -d bridge redis-net
## 连接容器
#创建redis-1 redis-2并启动容器 docker run -itd --name redis-1 --network redis-net redis /bin/bash docker run -itd --name redis-2 --network redis-net redis /bin/bash #登陆到redis-1 ping $ docker exec -it redis-1 /bin/bash root@e7ead95466cc:/data# ping redis-2 PING redis-2 (172.18.0.3) 56(84) bytes of data. 64 bytes from redis-2.redis-net (172.18.0.3): icmp_seq=1 ttl=64 time=0.217 ms 64 bytes from redis-2.redis-net (172.18.0.3): icmp_seq=2 ttl=64 time=0.057 ms 64 bytes from redis-2.redis-net (172.18.0.3): icmp_seq=3 ttl=64 time=0.109 ms
注意:如果没有Ping命令可以自己安装
apt-get update apt install iputils-ping 最好是吧ping命令打包到容器镜像
# hub.docker启动mysql
$ docker pull mysql
-e需要传递参数
$ docker run --name mysql8 -e MYSQL_ROOT_PASSWORD=root123 -d mysql $ docker exec -it mysql8 /bin/bash root@eba8da238366:/# mysql -uroot -proot123 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 8.0.27 MySQL Community Server - GPL
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
如果macos客户端需要连接,可以参考地址:https://hub.docker.com/_/mysql
# hub.docker启动postgresql
docker pull postgres:14.0 docker run --name pg14 -e POSTGRES_PASSWORD=root123 -d postgres:14.0 docker exec -it pg14 /bin/bash root@3e0dd656daa3:/# su - postgres postgres@3e0dd656daa3:~$ psql -d postgres psql (14.0 (Debian 14.0-1.pgdg110+1)) Type "help" for help.
postgres=#
如果macos客户端要连接pg,可以参数地址:https://hub.docker.com/_/postgres
# docker安装patroni
1.下载etcd,解压缩到patroni源码根目录中2.下载confd-0.16.0-linux-amd64,并改名confd复制到patroni源码根目录3.编译安装 $ docker build -t patroni .
[+] Building 88.7s (20/20) FINISHED
=> [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 7.33kB 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/postgres:13 4.3s => [auth] library/postgres:pull token for registry-1.docker.io 0.0s => [internal] load build context 0.2s => => transferring context: 5.86MB 0.2s => CACHED [builder 1/3] FROM docker.io/library/postgres:13@sha256:1adb50e5c24f550a9e68457a2ce60e9e4103dfc43c3b36e98310168165b443a1 0.0s => [builder 2/3] RUN set -ex && export DEBIAN_FRONTEND=noninteractive && echo 'APT::Install-Recommends "0";\nAPT::Install-Suggests "0";' > /etc/apt/apt.conf.d/01norecommend && apt-get 75.1s => [builder 3/3] RUN if [ "false" = "true" ]; then set -ex && echo 'postgres ALL=(ALL) NOPASSWD: /bin/tar xpJf /a.tar.xz -C /, /bin/rm /a.tar.xz, /bin/ln -snf dash /bin/sh' >> /etc 0.3s => [stage-1 1/11] COPY --from=builder / / 3.0s => [stage-1 2/11] COPY etcd/etcd /usr/local/bin 0.1s => [stage-1 3/11] COPY etcd/etcdctl /usr/local/bin 0.1s => [stage-1 4/11] COPY confd /usr/local/bin/confd 0.0s => [stage-1 5/11] COPY patroni /patroni/ 0.0s => [stage-1 6/11] COPY extras/confd/conf.d/haproxy.toml /etc/confd/conf.d/ 0.0s => [stage-1 7/11] COPY extras/confd/templates/haproxy.tmpl /etc/confd/templates/ 0.0s => [stage-1 8/11] COPY patroni*.py docker/entrypoint.sh / 0.0s => [stage-1 9/11] COPY postgres?.yml /home/postgres/ 0.0s => [stage-1 10/11] WORKDIR /home/postgres 0.0s => [stage-1 11/11] RUN sed -i 's/env python/&3/' /patroni*.py && sed -i 's/^( connect_address:| - host)/#&/' postgres?.yml && sed -i 's/^ listen: 127.0.0.1/ listen: 0.0.0.0/' postgr 0.4s => exporting to image 3.0s => => exporting layers 3.0s => => writing image sha256:3e8d05ab57f46b16378d99d7cfd092896153edc11b3766c838ed042b5db34d2f 0.0s => => naming to docker.io/library/patroni
4 启动三个patroni和三个etcd $ docker-compose up -d
Creating network "patroni-docker_demo" with the default driver Creating demo-patroni1 ... done Creating demo-patroni2 ... done Creating demo-etcd1 ... done Creating demo-haproxy ... done Creating demo-etcd2 ... done Creating demo-patroni3 ... done Creating demo-etcd3 ... done
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES d49af23d843b patroni "/bin/sh /entrypoint…" 19 seconds ago Up 17 seconds demo-etcd2 84337c47310f patroni "/bin/sh /entrypoint…" 19 seconds ago Up 17 seconds demo-etcd3 5548a6b76f62 patroni "/bin/sh /entrypoint…" 19 seconds ago Up 17 seconds demo-etcd1 c4da3845ecc5 patroni "/bin/sh /entrypoint…" 19 seconds ago Up 17 seconds demo-patroni2 dbac36b0d26c patroni "/bin/sh /entrypoint…" 19 seconds ago Up 17 seconds demo-patroni3 194e3724f3d4 patroni "/bin/sh /entrypoint…" 19 seconds ago Up 17 seconds 0.0.0.0:5000-5001->5000-5001/tcp demo-haproxy a0ffffe25ad6 patroni "/bin/sh /entrypoint…" 19 seconds ago Up 17 seconds demo-patroni1 8fc7bcaa82f0 8c2c38aa676e "/kube-vpnkit-forw
$patroni-docker zhangqi$ docker exec -ti demo-patroni1 bash postgres@patroni1:~$ patronictl list
•Cluster: demo (7026385006818775068) ------+----+-----------+ | Member | Host | Role | State | TL | Lag in MB |•----------+------------+---------+---------+----+-----------+ | patroni1 | 172.19.0.3 | Replica | running | 1 | 0 | | patroni2 | 172.19.0.6 | Leader | running | 1 | | | patroni3 | 172.19.0.2 | Replica | running | 1 | 0 |•----------+------------+---------+---------+----+-----------+ postgres@patroni1:~$ patronictl list•Cluster: demo (7026385006818775068) ------+----+-----------+ | Member | Host | Role | State | TL | Lag in MB |•----------+------------+---------+---------+----+-----------+ | patroni1 | 172.19.0.3 | Replica | running | 1 | 0 | | patroni2 | 172.19.0.6 | Leader | running | 1 | | | patroni3 | 172.19.0.2 | Replica | running | 1 | 0 |•----------+------------+---------+---------+----+-----------+ postgres@patroni1:~$ psql psql (13.4 (Debian 13.4-4.pgdg110+1)) Type "help" for help.
postgres=#
详情参考:https://github.com/zalando/patroni/tree/master/docker
5 关闭和启动集群 docker-compose start docker-compose stop ```




