追記2020/06/20
Rustは公式でDockerイメージを公表しているので、そちらを参考にされる方がよいです。
目的
配布可能なRustの実行・デバッグ環境が必要になったのでDockerで作りました。
dockerさえインストールしてあれば1行で環境構築が終わるはず。
TLTR
dockerhubに公開したので、以下のコマンドを実行すれば実行環境が手に入るはず!
docker pull padawane15/ubuntu_rust_exa
Ubuntu 20.04 LTS
MacOS 10.15.4 Catalina
Docker version 19.03.8
docker環境を自分で構築する方法
上記の環境構築ではなく、自分で作りたい場合には以下のような手順を踏みます。
Ubuntu(イメージ?)をダウンロードして、デバッグのためのコンテナを作成する
この際、ubuntu:[バージョン]とすることで、バージョンを指定できる。指定しないと最新がインストールされる。
docker pull utuntu
docker run --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --security-opt apparmor=unconfined -it --name ubuntu_rust_exa ubuntu /bin/bash
必要なパッケージをインストールする
[dockerコンテナの中]
- パッケージインストーラ
apt-get update -y && apt-get upgrade -y
apt-get install -y build-essential curl vim llvm lldb make wget git
- もしかしたら必要なもの(要求されれば入れる)
apt-get install -y tzdata build-essential curl git libbz2-dev libffi-dev liblzma-dev libncurses5-dev libncursesw5-dev libpq-dev libreadline-dev libsqlite3-dev libssl-dev llvm make tk-dev unzip vim wget xz-utils zlib1g-dev
- rustのインストールとパスの設定
curl https://sh.rustup.rs -sSf | sh
source $HOME/.cargo/env
source .bashrc
rustup component add rust-src
- 読みたいパッケージ
exa
を用意する
ソースコードからビルドしたいので、githubのソースコードをダウンロードする
git clone https://github.com/ogham/exa.git
- ビルドする
cargo build
でデバッグビルドになる(らしい?)
最適化は--release
をつけてビルドする。
cd exa
cargo build --release
cargo run --release
make install
- その他 これでもいいみたい。
cargo install --git https://github.com/ogham/exa
エラーになる原因 docker run オプション
の注意点
error: process launch failed: 'A' packet returned an error: 8
dockerの内部からlldbやgdbの機能を使うと出てくる。
今回オプションに付けたもので解決できる。
解決方法の参考文献 https://forums.swift.org/t/debugging-using-lldb/18046/2
dockerの停止、再開
dockerは仮想サーバーに近い。exit
で抜けても動いている。
- 停止したdockerコンテナに対してスタートして入る
docker start ubuntu_rust_exa
docker exec -it ubuntu_rust_exa /bin/bash
- dockerの中から抜ける
exit
- 動いているdockerコンテナの中に入る
docker attach ubuntu_rust_exa
- dockerの状態を確認する
docker image ls
docker container ls
- 実行中のプロセスを確認する
docker ps -a
- コンテナの削除
docker rm [containerid]
- イメージの削除
docker rmi [imageid]
- 全コンテナ停止
docker stop $(docker ps -qa)
dockerを公開する
- コンテナIDの確認
docker container ls
- dockerhubにコミットする
DockerHubに自分のアカウントを作成する。
コミットが成功したら、DockerHubの自分のアカウントページを見てみましょう。そこにさっき作ったリポジトリが追加されていたら成功です。
docker commit -m "first commit " -a "username" [containerid] [username]/[containername]
参考文献
https://github.com/ogham/exa
https://www.fabrica-com.co.jp/techblog/technology/994/
https://qiita.com/kiii142/items/cad9ac53a78c401545a2
https://www.slideshare.net/ShinichiMakino1/exa-84358376
https://blog.codecamp.jp/programming-docker-hub
https://qiita.com/legokichi/items/e2f807f70316a916f4be
https://forums.swift.org/t/debugging-using-lldb/18046/2