Byte
1Byte = 16Bit
0xf = 0b1111 : 16bit = 2Byte
1Byte = 16Bit
0xf = 0b1111 : 16bit = 2Byte
以下の CAfile: で確認できます。
$ curl https://www.yahoo.co.jp -v >> /dev/null * Uses proxy env variable no_proxy == 'localhost * Uses proxy env variable https_proxy == 'http://proxy.co.jp:8080' % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 10.51.8.102:8080... * Connected to proxy.co.jp port 8080 (#0) * allocate connect buffer! * Establish HTTP proxy tunnel to www.yahoo.co.jp:443 > CONNECT www.yahoo.co.jp:443 HTTP/1.1 > Host: www.yahoo.co.jp:443 > User-Agent: curl/7.71.1 > Proxy-Connection: Keep-Alive > < HTTP/1.1 200 Connection Established < Proxy-Agent: Zscaler/6.1 < * Proxy replied 200 to CONNECT request * CONNECT phase completed! * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: ~/anaconda3/ssl/cacert.pem ***ここで確認可能 CApath: none } [5 bytes data] * TLSv1.3 (OUT), TLS handshake, Client hello (1): } [512 bytes data] * CONNECT phase completed! * CONNECT phase completed! { [5 bytes data] * TLSv1.3 (IN), TLS handshake, Server hello (2):
curl の--cacertオプションを利用することで、利用するsslを変更できます。
curl https://www.yahoo.co.jp -v -cacert プロキシのパス
もしくは、以下のように環境変数を指定してもよい。
export SSL_CERT_FILE = Proxyのパス
curlコマンドでの一例
# curl -H "Content-Length:62" -H "Content-Type: application/json" -X POST https://10.165.8.68:8080/UserManagement/v1/edgeui/auth/signin -d '{"email": "defaultAdmin@admin.com", "password": "Admin1234!"}' -k -i -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0"
{"statusCode":"200 OK","status":"SUCCESS","message":"Signin success","data":{"userId":1,"email":"defaultAdmin@admin.com","accessToken":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJvYjJ1cTdHZ0lnSkRmbXJuZ3JWYWJObzRLaWMwNE40R05UNENUQkdVa2dNIn0.eyJleHAiOjE2MTA5MjQwNTcsImlhdCI6MTYxMDkyMzc1NywianRpIjoiZTVhMjY4OTItYmFkMC00M2NiLTllZTgtMjEzZmQ0MTVjZDVkIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgyL2F1dGgvcmVhbG1zL0VER0VVSSIsImF1ZCI6ImFjY291bnQiLCJzdWIiOiJmOjQ5MmE2ZjdhLTZjNmQtNGI4NS05ZDBiLTdlMjNiZWEyMTU2NDoxIiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiRURHRVVJIiwic2Vzc2lvbl9zdGF0ZSI6ImI5OGNhODlmLTgzYTAtNDI3NC1iYWJlLTBkZjg1YTM2MGYyNiIsImFjciI6IjEiLCJyZWFsbV9hY2Nlc3MiOnsicm9sZXMiOlsib2ZmbGluZV9hY2Nlc3MiLCJ1bWFfYXV0aG9yaXphdGlvbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7IkVER0VVSSI6eyJyb2xlcyI6WyJBcHBsaWNhdGlvbl9BZG1pbiIsIkNvbnRyb2xwYW5lbF9BZG1pbiJdfSwiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJvcGVuaWQgZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjpmYWxzZSwibmFtZSI6ImRlZmF1bHRBZG1pbiBkZWZhdWx0QWRtaW4iLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJkZWZhdWx0QWRtaW5AYWRtaW4uY29tIiwiZ2l2ZW5fbmFtZSI6ImRlZmF1bHRBZG1pbiIsImFjdGlvbnMiOlsiUmVhZF9Vc2VyX0FjY291bnRzIiwiQWRkX1JlcG9ydCIsIlZpZXdfQ29uZmlndXJlZF9Ob3RpZmljYXRpb25zIiwiQWRkX05ld19XaWRnZXQiLCJEZWxldGVfTm90aWZpY2F0aW9ucyIsIkRlbGV0ZV9SZXBvcnQiLCJSZWFkX1JlcG9ydCIsIlZpZXdfTGl2ZXZpZXciLCJBZGRfTm90aWZpY2F0aW9ucyIsIkFkZF9TZWFyY2hfUXVlcnkiLCJSZWFkX1JvbGVzIiwiVXBkYXRlX05vdGlmaWNhdGlvbnMiLCJWaWV3X0Jhc2ljX0NvbmZpZ3VyYXRpb25fT2ZfQW5hbHl0aWNzX1VuaXQiLCJWaWV3X0ZhY2VtYXRjaF9SZXN1bHRzIiwiRW5yb2xsX1N1YmplY3RzIiwiVXBkYXRlX0Jhc2ljX0NvbmZpZ3VyYXRpb25fT2ZfQW5hbHl0aWNzX1VuaXQiLCJVcGRhdGVfQmFzaWNfQ29uZmlndXJhdGlvbl9PZl9DYW1lcmEiLCJWaWV3X0FuYWx5dGljc19Vbml0IiwiQWRkX0ZhY2VtYXRjaCIsIlVwZGF0ZV9BbGVydHMiLCJEZWxldGVfU2VhcmNoX1F1ZXJ5IiwiRGVsZXRlX0FsZXJ0cyIsIkV4cG9ydF9SZXBvcnRzIiwiVmlld19TZWFyY2hfUXVlcnkiLCJEZWxldGVfV2lkZ2V0IiwiQWRkX0FsZXJ0cyIsIlZpZXdfQmFzaWNfQ29uZmlndXJhdGlvbl9PZl9DYW1lcmEiLCJSZWFkX0FsZXJ0cyIsIlZpZXdfUmVwb3J0X0RldGFpbHMiLCJHZW5lcmF0ZV9SZXBvcnRzIiwiVXBkYXRlX1dpZGdldCIsIkNyZWF0ZV9Vc2VyX0FjY291bnRzIiwiUmVtb3ZlX0FVX0xpY2Vuc2VzIiwiUmVhZF9TdWJqZWN0cyIsIkRlbGV0ZV9Vc2VyX0FjY291bnRzIiwiUmVhZF9BVV9MaWNlbnNlcyIsIlJlYWRfQ2FtZXJhcyIsIlVwZGF0ZV9Pd25fQWNjb3VudF9JbmZvIiwiRGVsZXRlX1JvbGVzIiwiUmVhZF9BbGxfQ29uZmlndXJhdGlvbnMiLCJSZWFkX0VWQV9BbmFseXRpY3NfVW5pdCIsIlVwZGF0ZV9FVkFfQW5hbHl0aWNzX1VuaXQiLCJDcmVhdGVfV2F0Y2hsaXN0cyIsIkFkZF9BdWRpdF9SZXBvcnQiLCJVcGRhdGVfV2F0Y2hsaXN0cyIsIlVwZGF0ZV9TdWJqZWN0cyIsIlJlYWRfV2F0Y2hsaXN0cyIsIkNyZWF0ZV9Sb2xlcyIsIlJlYWRfTm9kZV9IYXJkd2FyZV9TdGF0dXMiLCJEZWxldGVfQXVkaXRfUmVwb3J0IiwiUmVhZF9BdWRpdCIsIkNyZWF0ZV9FVkFfQW5hbHl0aWNzX1VuaXQiLCJWaWV3X0F1ZGl0X1JlcG9ydF9EZXRhaWxzIiwiVXBkYXRlX1JvbGVzIiwiRGVsZXRlX1dhdGNobGlzdHMiLCJBZGRfVXNlcl9BY2NvdW50cyIsIlVwZGF0ZV9DYW1lcmFfTG9jYXRpb25zIiwiRGVsZXRlX0NhbWVyYXMiLCJVcGRhdGVfVXNlcl9BY2NvdW50cyIsIkRlbGV0ZV9TdWJqZWN0cyIsIkFkZF9BVV9MaWNlbnNlcyIsIkNyZWF0ZV9TdWJqZWN0cyIsIlVwZGF0ZV9BbGxfQ29uZmlndXJhdGlvbnMiLCJEZWxldGVfRVZBX0FuYWx5dGljc19Vbml0IiwiQWRkX0NhbWVyYXMiLCJVcGRhdGVfQ2FtZXJhcyJdLCJmYW1pbHlfbmFtZSI6ImRlZmF1bHRBZG1pbiIsImVtYWlsIjoiZGVmYXVsdEFkbWluQGFkbWluLmNvbSIsImF1dGhvcml0aWVzIjpbIkFwcGxpY2F0aW9uX0FkbWluIiwiQ29udHJvbHBhbmVsX0FkbWluIl19.KXVCArJlJggmG5OhHn9OaCWyCXee8vbQz9CiuyX0pnF7wuQNa3ygDU6vvO3ABXnM-uiymSZbc3rYK-tU7JKt9FMHZvAOmE0P6_PZrJxi_XoHof1mcoebr_c9CoaOfnEKlEJrfh50CMyNv8NIhXZovT8daDdZRhDkmwGDybbYBY5aaAFJB63OPXWNVtYIJu5a-TqhkfN3RhwMDqjdJJABzKOMiXnlmQbCnjqmPPSEk6qOK12v25IPFMBfoWtvPPeGyptu9kqCQXi4EyuNetiTAi9IDEVAUmfismkDfcPtlcJQz6zH5JPhighm5NvLiYfww6cVQqh7UuYuQBF1HlCQQg","refreshToken":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJkYzMwZWNjMi1lY2U0LTQyNzAtODA1MC05ZmEyYjE1NmQ2NTgifQ.eyJleHAiOjE2MTA5MjU1NTcsImlhdCI6MTYxMDkyMzc1NywianRpIjoiNzU5ZmE2MmItZjJhZS00YzA0LTljODMtM2QzNGU0ZGY2ZjVhIiwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo4MDgyL2F1dGgvcmVhbG1zL0VER0VVSSIsImF1ZCI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA4Mi9hdXRoL3JlYWxtcy9FREdFVUkiLCJzdWIiOiJmOjQ5MmE2ZjdhLTZjNmQtNGI4NS05ZDBiLTdlMjNiZWEyMTU2NDoxIiwidHlwIjoiUmVmcmVzaCIsImF6cCI6IkVER0VVSSIsInNlc3Npb25fc3RhdGUiOiJiOThjYTg5Zi04M2EwLTQyNzQtYmFiZS0wZGY4NWEzNjBmMjYiLCJzY29wZSI6Im9wZW5pZCBlbWFpbCBwcm9maWxlIn0.Q2Q289YFOlpvTNtKpygaxBYv87b2MjVrRbYflT06P_0","tokenType":"bearer","remainingAttempts":4,"accountLocked":false,"defaultPassword":false}}
goで書いたプログラムをDockerコンテナ内で動かすためのDocker fileの例です。 動作としては、
FROM golang:1.15.1 RUN mkdir /echo COPY main.go /echo CMD ["go", "run", "/echo/main.go"]
パラメータを引き渡すためには、Docker fileにどのCommand実行時にパラメータを引渡するかをしているする必要があります。
以下のようにENTRYPOINTで指定したコマンドは、docker run コマンド実行字に引数を渡すことができます。
FROM centos:7 #Entry point : Provide parameter to executable cmd in docker container. ENTRYPOINT ["sh", "/sayhello/sayhello.sh"] RUN mkdir /sayhello COPY sayhello.sh /sayhello #Default prameter to provide executable cmd in docker container. #If no parameter are setting when executing cmd, this parameter is provided . CMD ["5"]
Reference: EntryPointの例 https://gitlab.com/stm05/k8s/dockerexample/-/tree/master
Dockerファイルの準備ができたら、Dockerfileと必要なファイルを同じディレクトリに集めて、以下のコマンドで、buildを行います。
# docker image build -t イメージ:[タグ名] Docerfile 配置ディレクトリのパス
$ sudo docker image build -t example/echo:latest . Sending build context to Docker daemon 6.441MB Step 1/4 : FROM golang:1.15.1 ---> 9f495162f677 Step 2/4 : RUN mkdir /echo ---> Using cache ---> 876f76330b0c Step 3/4 : COPY main.go /echo ---> Using cache ---> f6f3a9a2dc3a Step 4/4 : CMD ["go", "run", "/echo/main.go"] ---> Using cache ---> 9e8663cc9057 Successfully built 9e8663cc9057 Successfully tagged example/echo:latest
Docker ファイルのBuildに成功すると、以下のようにimageが登録されます。
# docker images REPOSITORY TAG IMAGE ID CREATED SIZE example/echo latest 9e8663cc9057 22 minutes ago 839MB
上記のDocker imagesを指定して、Dockerのプロセスを実行します。
# docker run example/echo:latest
コンテナの停止は以下のコマンドを利用します。
# docker stop [docker Names]
Dockerコンテナは、外部からは独立しており、Docker内のアプリケーションのポートが開放されていても、外部からはそのままでは、アクセスできないです。 アクセスするためには、Dockerホストのポートと、Docker内部のアプリケーションのポートを紐付ける必要があります。
以下のように'-p' オプションを利用することで、ポートフォワーディングの設定ができます。
-p ホストのポート:コンテナアプリケーションのポート で指定します。
# docker run -p 9000:8080 9e8663cc9057
上記で、起動したコンテナには、外部から9000番ポートでアクセス可能です。
なお、起動しているコンテナのどのポートが空いているかは、docker psコマンドで確認可能です。
# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6e940bc44898 9e8663cc9057 "go run /echo/main.go" 7 minutes ago Up 7 minutes 0.0.0.0:9000->8080/tcp dreamy_murdock
0.0.0.0:9000->8080/tcp となっており、ホストの9000番ポートから、コンテナの8080ポートにアクセスすることができます。
Docker コンテナ内へアクセスするためのコマンドは以下の通り。
# docker exec -it 6e940bc44898 /bin/bash
Dockerの不要イメージを削除する場合は、docker image prune コマンドを利用します。 これは、dokcer自身が不要だと判断したimageが削除されます。
docker image prune
以下のコマンド(docker stats)を利用して、コンテナ単位で、システムリソースの利用状況を把握できます。
docker stats [Docker name]
# docker stats jolly_perlman CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 7295a86a463f jolly_perlman 0.20% 2.52MiB / 15.56GiB 0.02% 6.91kB / 0B 0B / 0B 2
# sudo docker pull registry
#docker run -d -p 5000:5000 --name registry -e REGISTRY_STORAGE_DELETE_ENABLED=true registry:2
3. イメージをbuildします。
# docker image build -t イメージ:[タグ名] Docerfile 配置ディレクトリのパス
4. イメージをTagをつけて、resittryにPush します。 ここでは、registryがLocalにあり、5000ポートでListen しているとしています。
# docker tag <image Tag> localhost:5000/imagename:latest # docker push localhost:5000/imagename:latest
$ curl http://localhost:5000/v2/_catalog {"repositories":["video2"]}
デフォルト設定では、Dockerのregistryに外のノードからhttpでアクセスしようとすると、怒られる。
$ sudo docker push 192.168.10.100:5000/sample-application:latest The push refers to repository [192.168.10.100:5000/sample-application] Get https://192.168.10.100:5000/v2/: http: server gave HTTP response to HTTPS client
Client側の/etc/docker/にdaemon.jsonファイルを作成して、httpでアクセスしたい、registry除法を記載する。
I.E. registryが192.168.10.100 の5000ポートの場合
{ "insecure-registries": ["192.168.10.100:5000"] }
その後、以下のコマンドでdocker daemonをリスターとする。
#system daemon-reload #system restart docker.service
$ curl localhost:5000/v2/_catalog |jq . { "repositories": [ "sample-applicatoin" ] }
APIのフォーマットは以下の通りです。 /v2/<イメージ>/tags/list
$ curl http://localhost:5000/v2/sample-application/tags/list |jq . { "name": "sample-application", "tags": [ "latest" ] }
APIのフォーマットは以下の通りです。
/v2/<イメージ>/manifests/
$ curl -i http://localhost:5000/v2/sample-application/manifests/latest HTTP/1.1 200 OK Content-Length: 7297 Content-Type: application/vnd.docker.distribution.manifest.v1+prettyjws Docker-Content-Digest: sha256:caf02fe9a6a2ef22272d592b613ae4328865047c9c5c8c1b1f4ebf376ccb54b3 Docker-Distribution-Api-Version: registry/2.0 Etag: "sha256:caf02fe9a6a2ef22272d592b613ae4328865047c9c5c8c1b1f4ebf376ccb54b3" X-Content-Type-Options: nosniff Date: Fri, 06 Aug 2021 05:36:26 GMT { "schemaVersion": 1, "name": "sample-application", "tag": "latest", "architecture": "amd64", "fsLayers": [ { "blobSum": "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4" }, { "blobSum": "sha256:c2ffe8edbb6aa773ae9760834096556bb56aa0d0f441094d2470c86afbc567d1"
Docker-Content-Digest: sha256:caf02fe9a6a2ef22272d592b613ae4328865047c9c5c8c1b1f4ebf376ccb54b3 が必要なdigist です。
4.イメージの削除
DockerBuild時に、以下のようなエラーが出る場合、dockerが名前を解決できていない可能性がある。
npm ERR! code EAI_AGAIN npm ERR! errno EAI_AGAIN npm ERR! request to https://registry.npmjs.org/semver/-/semver-6.3.0.tgz failed, reason: getaddrinfo EAI_AGAIN proxyg.co.jp
解決方法 /etc/docker/daemon.jsonにDNSサーバのアドレスを入力。 /etc/docker/daemon.json
{ "dns": ["DNSアドレス1","DNSアドレス2"] }
dockerサービスを再起動する。
# systemctl resetart docker.service
環境はUbuntu 18.04で構築しました。
sudo apt-get update sudo apt-get install openjdk-11-jre
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add - sudo sh -c 'echo deb https://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list' sudo apt-get update sudo apt-get install jenkins
sudo systemctl start jenkins sudo systemctl stop jenkins
RHELのISOイメージをUSBに書き込んで、Installしようとさせたときに以下のようなエラーが出てタイムアウトしてしまいました。 その結果、Installできなくなりました。
Warning: dracut-initqueue timeout Warning: /dev/xxxxx/xxxx does not exist.
USB内のInstallイメージを見つけられないことが原因のようです。 grub.cfgでDISKのインストールイメージパスの設定がされていますが、何らかの理由で正しいパスが設定できていないようです。
grub.cfgに記載されているDISKのインストールイメージパスをUSBに向けます。
dracut:/#
#ls -al /dev/disk/by-id/ lrwxrwxrwx 1 root 0 9 : 04:15 ata-ST9555xxxxxxxxxx -> ../../sdb ・ ・ lrwxrwxrwx 1 root 0 9 : 04:15 usb-Generic_Flash_Disk_xxxxxxxxxx -> ../../sdc lrwxrwxrwx 1 root 0 9 : 04:15 usb-Generic_Flash_Disk_xxxxxxxxxx -part1 -> ../../sdc1
#ls -al /dev/disk/by-uuid/ lrwxrwxrwx 1 root 0 9 : 04:15 79d1d39493xxxxxxxx -> ../../sda2 ・ ・ lrwxrwxrwx 1 root 0 9 : 04:15 C0DC-962A -> ../../sdc1
setparams 'Install Red Hat Enterprise Linux 7.8' linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:LABEL=RHEL-7.8\x20Serv\er.x86_64 quit initrdefi /images/pxeboot/initrd.img
上記のhd:Labelを5で調べたUUIDに変更する。
setparams 'Install Red Hat Enterprise Linux 7.8' linuxefi /images/pxeboot/vmlinuz inst.stage2=hd:UUID=C0DC-962A quit ★ここが変更場所 hd:UUID=調べたUUID というフォーマット initrdefi /images/pxeboot/initrd.img
1. jpsコマンドを利用して、JAVAのプロセスIDを確認します。 ここでは、Bootstrapを見たいので、プロセスIDは1180になります。
# jps 21509 Jps 1180 Bootstrap 1774 jboss-modules.jar
top -p 1180 -b -d 60 |tee -a top_cpu
top -p 1180 -b -n 1
1. jpsコマンドを利用して、JAVAのプロセスIDを確認します。 ここでは、Bootstrapを見たいので、プロセスIDは1180になります。
# jps 21509 Jps 1180 Bootstrap 1774 jboss-modules.jar
# jstat -gc 1180 60000 |tee -a jstat_heap S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 37888.0 39936.0 3848.4 0.0 3262976.0 1572221.1 488448.0 63041.7 105088.0 100846.7 12928.0 12096.3 34 1.082 4 0.568 1.650
確保済み領域 (9216.0[S0C] + 6144.0[S1C] + 30720.0[EC] + 40448.0[OC] + 27136.0[MC]) / 1024 = 111MB
使用済み領域の確認 (0.0[S0U] + 5895.0[S1U] + 17433.9[EU] + 16309.2[OU]) / 1024 = 38MB
見方はこちらを参考にさせていただきました。 qiita.com
$ sudo -u tomcat jmap -histo:live 1180