Docker+Ubuntu+PostgreSQL セットアップ
公式 Ubuntuイメージに PostgreSQLなどをつめこんでみます
请参考该页。
docker docs 公式サイト
https://matsuand.github.io/docs.docker.jp.onthefly/
インストールバージョン
Docker桌面版4.6.1
Ubuntu 22.04 LTS
PostgreSQL 15
.NET6
.NET7
Docker Desktop のセットアップ
适用于 Mac 和 Windows 的 Docker 套件共享平台
Windowsのみ WSL2 for x64
https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
进行第一次动作确认
从命令行进行操作测试
# 公式イメージを取得
docker pull hello-world
# コンテナを作成
docker run -it --name hello-world hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
(中略)
コンテナ操作
# コンテナ一覧
docker ps -a
# コンテナ開始
docker start コンテナID or コンテナ名
# コンテナ停止
docker stop コンテナID or コンテナ名
イメージ操作
# イメージ一覧
docker images
# イメージ削除
docker rm イメージ名[:タグ]
イメージのカスタマイズ
基于提供的公式图像,描述添加应用程序和设置。
以下假设在/Users/用户名/Docker/Ubuntu目录下创建。
#---------------------------------
# For Docker
#---------------------------------
FROM ubuntu:22.04
#---------------------------------
# For Ubuntu
#---------------------------------
#シェル指定
SHELL ["/usr/bin/bash", "-l", "-c"]
#初回のアップデートを強制
RUN apt update && apt upgrade -y
#最低限のメンテナンスツール
#2回目以降のapt installでも毎回updateをして、dockerの差分buildによるキャッシュの悪さを回避する
RUN apt-get update && apt-get install -y ca-certificates curl dnsutils gnupg gnupg2 htop iputils-ping lsb-release net-tools sqlite3 vim wget lftp
#---------------------------------
# For PostgreSQL
#---------------------------------
ENV TZ=Asia/Tokyo
ENV LANG=ja_JP.UTF-8
ENV LANGUAGE=ja_JP:ja
ENV LC_ALL=ja_JP.UTF-8
#無人インストール化
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get update && apt-get install -y locales-all
RUN curl https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/trusted.gpg.d/apt.postgresql.org.gpg >/dev/null
RUN sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
RUN apt-get update && apt-get install -y postgresql-15
#初期設定
USER postgres
RUN /etc/init.d/postgresql start && \
psql -c "alter user postgres with encrypted password 'postgres'" && \
psql -c "create user docker with password 'docker' superuser;" && \
psql -c "create database docker owner docker;" && \
psql -d docker -c "create schema authorization docker;" && \
psql -c "create role readonly with login password 'readonly';" && \
psql -c "grant pg_read_all_data to readonly;"
RUN echo "host all all 0.0.0.0/0 md5" >> /etc/postgresql/15/main/pg_hba.conf
RUN echo "listen_addresses='*'" >> /etc/postgresql/15/main/postgresql.conf
USER root
#ポート解放
EXPOSE 5432
#---------------------------------
# For .NET 6
# Ubuntu22.04から公式レポジトリ経由での取得が可能
#---------------------------------
# RUN apt-get update && apt-get install -y dotnet6
#---------------------------------
# For .NET 7
#---------------------------------
RUN wget https://packages.microsoft.com/config/ubuntu/22.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
RUN dpkg -i packages-microsoft-prod.deb
RUN rm packages-microsoft-prod.deb
#RUN apt-get update && apt-get install -y apt-transport-https
RUN apt-get update && apt-get install -y dotnet-sdk-7.0 aspnetcore-runtime-7.0
#---------------------------------
# For OpenJDK
#---------------------------------
ENV TZ=Asia/Tokyo
#無人インストール化
ARG DEBIAN_FRONTEND=noninteractive
RUN apt update && apt install -y openjdk-17-jdk
#環境変数
#/etc/environmentに書き込んでもログイン時にsourceしてないため、Dockerfileで変数セットする
#RUN echo "JAVA_HOME=\"/usr/lib/jvm/java-17-openjdk-amd64\"" >> /etc/environment
ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
#---------------------------------
# For TomCat
#---------------------------------
RUN apt update && apt install -y tomcat9 tomcat9-admin
ENV CATALINA_HOME=/usr/share/tomcat9
ENV CATALINA_BASE=/var/lib/tomcat9
COPY ./mnt/tomcat9/var/lib/tomcat9/conf/web.xml /var/lib/tomcat9/conf
COPY ./mnt/tomcat9/var/lib/tomcat9/webapps/ROOT/index.txt /var/lib/tomcat9/webapps/ROOT
#ポート解放
EXPOSE 8080
#---------------------------------
# For Nginx
#---------------------------------
RUN apt update && apt install -y ubuntu-keyring
RUN curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
RUN echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list
RUN apt update && apt install -y nginx fcgiwrap spawn-fcgi
COPY ./mnt/nginx/etc/nginx/nginx.conf /etc/nginx
COPY ./mnt/nginx/usr/share/nginx/html/* /usr/share/nginx/html
RUN chmod 755 /usr/share/nginx/html/index.sh
COPY ./mnt/fcgiwrap/etc/init.d/fcgiwrap /etc/init.d
#ポート解放
EXPOSE 8000
#---------------------------------
# For Node.js
#---------------------------------
RUN curl -fsSL https://deb.nodesource.com/setup_16.x | bash -
RUN apt update && apt install -y nodejs
#ポート解放
EXPOSE 8888
#---------------------------------
# For MongoDB
#---------------------------------
RUN wget -qO - https://www.mongodb.org/static/pgp/server-5.0.asc | apt-key add -
RUN echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/5.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-5.0.list
RUN apt update && apt install -y mongodb-org
EXPOSE 27017
#---------------------------------
# For Docker
#---------------------------------
#コンテナ起動時に各サービス・プロセスを起動
COPY ./startup.sh /startup.sh
RUN chmod 744 /startup.sh
STOPSIGNAL SIGINT
ENTRYPOINT /startup.sh
以 startup.sh 的名称创建启动和关闭脚本。
#!/bin/sh
#終了処理
handle(){
/etc/init.d/fcgiwrap stop
/etc/init.d/ngix stop
/etc/init.d/postgresql stop
exit 0
}
trap handle TERM INT
#起動処理
/usr/libexec/tomcat9/tomcat-start.sh &
/usr/bin/node /mnt/bind/nodejs/webserver.js &
/etc/init.d/fcgiwrap start
/etc/init.d/nginx start
/etc/init.d/postgresql start
/bin/bash
在中国执行形象建设
docker build -t イメージ名[:タグ] .
コンテナ作成
docker run -it -d
-p ホストポート1:コンテナポート1
-p ホストポート2:コンテナポート2
-p ホストポート3:コンテナポート3
--mount type=bind,source=/Users/ユーザ名/Docker/Ubuntu/mnt,target=/mnt
--name コンテナ名
イメージ名:タグ
确认动作
连接到运行在Docker上的Ubuntu,并进一步连接到PostgreSQL以确认版本信息等。
# コンテナ一覧
docker ps -a
# コンテナ情報
docker inspect コンテナ名
# コンテナ情報 (マウント情報)
docker inspect --format='{{.Mounts}}' コンテナ名
# コンテナ情報 (IP情報)
docker inspect --format='{{.NetworkSettings.IPAddress}}' コンテナ名
# コンテナ情報 (ポートフォーワード情報)
docker inspect --format='{{.NetworkSettings.Ports}}' コンテナ名
# コンテナログ
docker logs コンテナ名
# Ubuntu 接続
docker exec -it コンテナ名 bash
# PostgreSQL 接続
psql -h 127.0.0.1 -U docker
Password for user docker: docker
-- ここから PostgreSQL コマンドラインインターフェース
-- バージョン情報
select version();
version
------------------------------------------------------------------
PostgreSQL 14.2 (Ubuntu 14.2-1.pgdg20.04+1) on x86_64-pc-linux-gnu
(1 row)
-- 現在のデータベース
select current_database();
current_database
------------------
docker
(1 row)
-- 現在のスキーマ
select current_schema;
current_schema
----------------
docker
(1 row)
-- 終了
\q
-- ここから /bin/bash
-- 終了
exit