简介
TIPS
什么是 Docker
传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
TIPS
Docker 的优势
TIPS
一、Image
采用的文件系统参考:
https://docs.docker.com/storage/storagedriver/
二、Container
三、Registry
TIPS
Docker架构
更详细内容参考:
https://docs.docker.com/get-started/overview/#docker-architecture
Docker 快速上手
TIPS
安装
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo docker run hello-world
资料参考:
https://docs.docker.com/engine/install/
TIPS
镜像命令
[root@192 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 6 months ago 13.3kB
docker pull NAME:TAG
[root@192 ~]# docker pull postgres
Using default tag: latest
latest: Pulling from library/postgres
a2abf6c4d29d: Pull complete
e1769f49f910: Pull complete
33a59cfee47c: Pull complete
461b2090c345: Pull complete
8ed8ab6290ac: Pull complete
495e42c822a0: Extracting [===> ] 32.77kB/441.7kB
18e858c71c58: Download complete
594792c80d5f: Download complete
794976979956: Downloading [=====================> ] 38.32MB/91.23MB
eb5e1a73c3ca: Download complete
6d6360292cba: Download complete
131e916e1a28: Download complete
757a73507e2e: Download complete
拉取完成后,查看本地已有镜像。
[root@192 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
postgres latest 07e2ee723e2d 3 months ago 374MB
hello-world latest feb5d9fea6a5 6 months ago 13.3kB
docker rmi IMAGE
删除所有镜像,即:
docker rmi $(docker images -qa)
Docker 设置国内镜像源可以参考: http://mirrors.ustc.edu.cn/help/dockerhub.html
TIPS
容器命令
docker run --name pg14 -e POSTGRES_PASSWORD=qwe123 -d postgres
docker ps -a
[root@192 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de77f9716542 postgres "docker-entrypoint.s…" 4 minutes ago Up 4 minutes 5432/tcp pg14
ec0accd39909 hello-world "/hello" 36 minutes ago Exited (0) 36 minutes ago friendly_merkle
[root@192 ~]# docker exec -it pg14 bash
root@de77f9716542:/# psql postgres postgres
psql (14.1 (Debian 14.1-1.pgdg110+1))
Type "help" for help.
postgres=# select version();
version
-----------------------------------------------------------------------------------------------------------------------------
PostgreSQL 14.1 (Debian 14.1-1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
(1 row)
postgres=# \q
docker start CONTAINER
docker stop CONTAINER
docker restart CONTAINER
docker inspect NAME|ID
[root@192 ~]# docker inspect pg14
[
{
"Id": "84bfdc303cdcd71cf640a13103c0b78576b1c0ddd73316b04ed65b38f9010b70",
"Created": "2022-04-13T14:24:43.815894123Z",
"Path": "docker-entrypoint.sh",
"Args": [
"postgres"
],
"State": {
"Status": "running",
......
"Networks": {
"bridge": {
"IPAMConfig": null,
"Links": null,
"Aliases": null,
"NetworkID": "672e3d3aa95c4eadf2028a33280052f920c7326bb3c36d84faff34eaebaeffdf",
"EndpointID": "5c749f10ab0470d588155c5e8d7f9ea07fe0bccb886f2f515ec894d773822ad4",
"Gateway": "172.17.0.1",
"IPAddress": "172.17.0.2",
"IPPrefixLen": 16,
"IPv6Gateway": "",
"GlobalIPv6Address": "",
"GlobalIPv6PrefixLen": 0,
"MacAddress": "02:42:ac:11:00:02",
"DriverOpts": null
}
}
}
}
]
[root@192 ~]# docker logs pg14
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.utf8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are disabled.
fixing permissions on existing directory /var/lib/postgresql/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
......
七、传输文件
# 从主机向容器传文件
docker cp SRC_PATH CONTAINER:DEST_PATH
# 从容器向主机传文件
docker cp CONTAINER:SRC_PATH DEST_PATH
docker rm CONTAINER
docker rm $(docker ps -qa)
TIPS
目录挂载
如图所示,分别是 volume、bind mount 和 tmpfs mount,其意义有如下几点:
资料参考:
https://docs.docker.com/storage/volumes/
# 创建一个名为 mydata 的卷
docker volume create mydata
# 查看已有的卷
docker volume ls
# 查看 mydata 卷的信息
docker volume inspect mydata
# 删除一个卷
docker volume rm mydata
# 删除未被使用的卷
docker volume prune
# 直接在挂载时指定卷名:容器内路径
docker run -d --name pg14 -e POSTGRES_PASSWORD=qwe123 -v mydata:/var/lib/postgresql/data postgres
# 或提前创建好卷,然后挂载
docker volume create mydata1
docker run -d --name pg141 -e POSTGRES_PASSWORD=qwe123 -v mydata1:/var/lib/postgresql/data postgres
# 匿名挂载在使用时直接指定容器内路径即可,Docker 会自动创建卷进行管理
docker run -d --name pg142 -e POSTGRES_PASSWORD=qwe123 -v /var/lib/postgresql/data postgres
# 在创建容器时直接指定挂载在主机上的路径,不会自动创建卷
docker run -d --name pg143 -e POSTGRES_PASSWORD=qwe123 -v /root/my_pgdata:/var/lib/postgresql/data postgres
资料参考: https://docs.docker.com/storage/
TIPS
Dockerfile
RUN <命令>
RUN ["可执行文件", "参数1", "参数2"]
COPY [--chown=<user>:<group>] <源路径>... <目标路径>
COPY [--chown=<user>:<group>] ["<源路径1>",... "<目标路径>"]
五、CMD 容器启动命令
CMD <命令>
CMD ["可执行文件", "参数1", "参数2"...]
六、ENTRYPOINT 入口点
ENTRYPOINT 的格式、目的和 RUN 指令格式一样,都是在指定容器启动程序及参数。ENTRYPOINT 在运行时也可以替代,不过比 CMD 要略显繁琐,需要通过 docker run 的参数--entrypoint 来指定。
CMD 测试:
# 编写 Dockerfile 文件
FROM centos
CMD ["ls", "-a"]
# 构建镜像
docker build -t cmdtest:1.0 .
# run运行,可以看到 ls -a 已经执行
docker run cmdtest:1.0
# 想追加一个命令参数,如果使用下面的写法就会报错
docker run cmdtest:1.0 -l
# 原因是 -l 替换了 CMD 的命令,而 -l 不是命令 ,就报错了
ENTRYPOINT 测试:
# 编写 Dockerfile 文件
FROM centos
ENTRYPOINT ["ls", "-a"]
# 构建镜像
docker build -t entrypointtest:1.0 .
# run 镜像,同样可以看到 ls -a 执行
docker run entrypointtest:1.0
# 这时候加上 -l,就不会报错了
docker run entrypointtest:1.0 -l
七、ENV 设置环境变量
ENV <key> <value>
ENV <key1>=<value1> <key2>=<value2>...
八、ARG 构建参数
ARG <参数名>[=<默认值>]
Dockerfile 中的 ARG 指令是定义参数名称,以及定义其默认值。该默认值可以在构建命令 docker build 中用--build-arg <参数名>=<值>来覆盖。灵活的使用 ARG 指令,能够在不修改 Dockerfile 的情况下,构建出不同的镜像。
九、VOLUME 定义匿名卷
VOLUME ["<路径1>", "<路径2>"...]
VOLUME <路径>
十、EXPOSE 声明端口
EXPOSE <端口1> [<端口2>...]
WORKDIR <工作目录路径>
USER <用户名>[:<用户组>]
资料参考:
https://docs.docker.com/engine/reference/builder/;https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
TIPS
构建HGDB镜像
FROM centos:7
COPY . /root
WORKDIR /root
ENV PGDATA=/opt/HighGo4.5.7-see/data
RUN rpm -ivh hgdb4.5.7-see-centos7-x86-64-20211119.rpm \
&& echo "export LD_LIBRARY_PATH=/usr/lib64:${LD_LIBRARY_PATH}:/opt/HighGo4.5.7-see/lib" >> /opt/HighGo4.5.7-see/etc/highgodb.env \
&& source /opt/HighGo4.5.7-see/etc/highgodb.env \
&& initdb -D ${PGDATA} -A md5 --pwfile=./default_password \
&& chmod 0600 /opt/HighGo4.5.7-see/etc/server.* \
&& cp /opt/HighGo4.5.7-see/etc/server.* ${PGDATA} \
&& echo "listen_addresses = '*'" >> /opt/HighGo4.5.7-see/data/postgresql.auto.conf \
&& sed -i "s/127.0.0.1\/32/0.0.0.0\/0/g" /opt/HighGo4.5.7-see/data/pg_hba.conf \
&& /opt/HighGo4.5.7-see/bin/pg_ctl start -D /opt/HighGo4.5.7-see/data \
&& echo "source /opt/HighGo4.5.7-see/etc/highgodb.env" >> /root/.bashrc \
&& rm hgdb4.5.7-see-centos7-x86-64-20211119.rpm \
&& rm default_password \
&& rm Dockerfile
VOLUME ["${PGDATA}"]
EXPOSE 5866
CMD ["/opt/HighGo4.5.7-see/bin/postgres"]
Hello@123
Hello@123
Hello@123
###注: 以上密码分别为sysdba、syssao、syssso用户的默认密码###
docker build -t hgdb457:1.0 .
docker run --name hgdb457_1 -p 5866:5866 -v hgdb_data:/opt/HighGo4.5.7-see/data --restart=always -d hgdb457:1.0
docker save hgdb457:1.0 -o hgdb457.tar
将上一步的 hgdb457.tar 放到新的机器上,导入为镜像:
docker load -i hgdb457.tar
Docker 快速上手版块命令及帮助可参考: https://docs.docker.com/reference/
如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!
添加我为好友,拉您入交流群!
请使用微信扫一扫!